【问题标题】:The proper way of using IsolationForest to detect outliers of high-dim dataset使用 IsolationForest 检测高维数据集异常值的正确方法
【发布时间】:2017-11-18 01:41:47
【问题描述】:

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

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 在逻辑上是否正确?

【问题讨论】:

    标签: machine-learning scikit-learn outliers


    【解决方案1】:

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

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

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

    如果测试集的得分与训练集相似,我会更适应在所有数据上训练的最终隔离森林。

    也许您可以以这种方式使用 sklearn TimeSeriesSplit CV 来了解多少数据足以解决您的问题?

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

    【讨论】:

    • 非常感谢。当你说TimeSeriesSplit 时,你的意思是正常的train_test_split吗?
    • 不,我添加了一个链接。它是为 TimeSeries 数据而设计的,但步进逻辑会让您看到有多少数据“足够”。当然数据越多越好。 :)
    猜你喜欢
    • 2014-04-16
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    • 2015-11-22
    • 2017-12-19
    • 1970-01-01
    • 2021-07-22
    • 2021-10-22
    相关资源
    最近更新 更多