在管道中使用 Transformers 在 scikit-learn 中进行异常值检测

Qui*_*2k1 5 python outliers scikit-learn

我想知道是否可以在 scikit-learn 的管道中包含 scikit-learn 异常值检测,例如隔离森林

所以这里的问题是我们只想在训练数据上拟合这样的对象,而在测试数据上什么都不做。特别是,人们可能想在这里使用交叉验证。

解决方案如何?

构建一个继承自 TransformerMixin(以及用于 ParameterTuning 的 BaseEstimator)的类。现在定义一个 fit_transform 函数,用于存储该函数是否已被调用的状态。如果尚未调用,则该函数会拟合并预测数据上的异常值函数。如果之前已经调用过该函数,则已经对训练数据调用了异常值检测,因此我们假设我们现在找到了我们简单返回的测试数据。

这种方法有机会奏效还是我在这里遗漏了什么?

MMF*_*MMF -2

你的问题基本上是异常值检测问题。\n希望scikit-learn 提供一些函数来预测训练集中的样本是否是异常值。

\n\n

它是如何工作的 ?如果你查看文档,它基本上说:

\n\n

执行离群值检测的一种常见方法是假设常规数据来自已知分布(例如,数据是高斯分布的)。根据这个假设,我们通常尝试定义数据的 \xe2\x80\x9cshape\xe2\x80\x9d ,并且可以将离群观测值定义为距离拟合形状足够远的观测值

\n\n

sklearn提供了一些允许您估计数据形状的函数。看一下:椭圆形包络线隔离森林

\n\n

就我而言,我更喜欢使用IsolationForest返回训练集中每个样本的异常分数的算法。然后您可以将它们从您的训练集中删除。

\n