我想知道是否有可能在scikit-learn的管道中包含scikit-learn outlier detection如隔离森林?
所以这里的问题是我们希望仅将这样的对象放在训练数据上,而不对测试数据做任何事情。特别是,人们可能想在这里使用交叉验证。
解决方案怎么样?
构建一个继承自TransformerMixin的类(以及用于ParameterTuning的BaseEstimator)。 现在定义一个fit_transform函数,该函数存储状态(如果函数已被调用)。如果尚未调用,则该函数适合并预测数据的异常函数。如果之前已经调用过该函数,则已经在训练数据上调用了离群值检测,因此我们假设现在我们找到了简单返回的测试数据。
这种方法是否有机会发挥作用,或者我在这里遗漏了什么?
答案 0 :(得分:0)
您的问题基本上是异常值检测问题。 希望 scikit-learn提供一些功能来预测您的火车组中的样本是否是异常值。
它是如何运作的?如果你看documentation,它基本上会说:
执行离群值检测的一种常见方法是假设常规数据来自已知分布(例如,数据是高斯分布的)。根据这个假设,我们通常尝试定义数据的“形状”,并且可以将外围观察定义为与拟合形状相距足够远的观察。
sklearn
提供了一些功能,可用于估算数据的形状。请查看:elliptic envelope和isolation forests。
就我而言,我更喜欢使用IsolationForest
算法来返回火车组中每个样本的异常分数。然后你可以把他们从你的训练集中拿走。