machine-learning - 使用 IsolationForest 检测高维数据集异常值的正确方法

标签 machine-learning scikit-learn outliers

我使用以下简单的IsolationForest算法来检测 20K 样本和 16 特征的给定数据集 X 的异常值,我运行以下

train_X, tesy_X, train_y, test_y = train_test_split(X, y, train_size=.8)

clf = IsolationForest()
clf.fit(X)   # Notice I am using the entire dataset X when fitting!!
print (clf.predict(X))

我得到结果:

[ 1 1 1 -1 ... 1 1 1 -1 1]

这个问题是:在拟合IsolationForest时使用整个数据集X或仅使用train_X在逻辑上是否正确?

最佳答案

是的,最终在整个数据集上进行训练在逻辑上是正确的。

考虑到这一点,您可以根据训练集的性能来衡量测试集的性能。这可以告诉您测试集是否来自与训练集相似的分布。

如果测试集的得分与训练集相比异常,那么您可以预期 future 的数据会相似。在这种情况下,我需要更多数据来更全面地了解什么是“正常”。

如果测试集的得分与训练集的得分相似,我会对在所有数据上训练的最终隔离森林感到更加满意。

也许你可以使用 sklearn TimeSeriesSplit以这种方式进行简历来了解有多少数据足以解决您的问题?

由于这是异常检测器未标记的数据,因此定义“正常”时数据越多越好。

关于machine-learning - 使用 IsolationForest 检测高维数据集异常值的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47361620/

相关文章:

R删除按因素分组的数据框中的异常值

machine-learning - 调整 CNN 输入大小的正确方法(例如 VGG)

python - 将 S3 数据加载到 AWS SageMaker Notebook

python - XGBClassifier 的特征重要性

sas - 按组绘制的箱线图,加上用户定义的散点图(值子集的标记)

scala - "Find the Parity Outlier Code Wars (Scala)"

python - 如何根据损失值告诉 Keras 停止训练?

python - 如何分割我的图像和标签,使其可以用作机器学习的特征?

python - 使用 Pandas 创建 NumPy 数组

python - 用句子增量训练 Sklearn 的 SGD 分类器