Python 你能在大样本上使用隔离林算法吗?
我一直在使用隔离林的scikit learnPython 你能在大样本上使用隔离林算法吗?,python,algorithm,machine-learning,scikit-learn,sampling,Python,Algorithm,Machine Learning,Scikit Learn,Sampling,我一直在使用隔离林的scikit learnsklearn.ensemble.IsolationForest实现来检测我的数据集中的异常,这些异常的数据从100行到数百万行不等。它似乎工作得很好,我已经将max_samples重写为一个非常大的整数,以处理一些较大的数据集(基本上不使用子采样)。我注意到,较大的样本量会产生淹没和掩蔽的风险 如果隔离林似乎可以正常工作,那么在大样本量上使用它可以吗?我尝试使用较小的max_samples进行训练,测试产生了太多异常。我的数据真的开始增长,我想知道,
sklearn.ensemble.IsolationForest
实现来检测我的数据集中的异常,这些异常的数据从100行到数百万行不等。它似乎工作得很好,我已经将max_samples
重写为一个非常大的整数,以处理一些较大的数据集(基本上不使用子采样)。我注意到,较大的样本量会产生淹没和掩蔽的风险
如果隔离林似乎可以正常工作,那么在大样本量上使用它可以吗?我尝试使用较小的
max_samples
进行训练,测试产生了太多异常。我的数据真的开始增长,我想知道,对于如此大的样本量,使用不同的异常检测算法是否会更好。引用原始论文:
iTrees的隔离特性使其能够构建部分
在某种程度上,模型和利用子抽样在实际应用中是不可行的
现有方法。因为大部分的iTree都能隔离正常的
异常检测不需要点不需要这样做
构建。小样本量产生更好的iTrees,因为
沼泽和掩蔽效果减少
从您的问题中,我有一种感觉,您混淆了数据集的大小和从中获取的用于构建iTree的样本的大小。隔离林可以处理非常大的数据集。当它对它们进行采样时,效果更好
原始文件在第3章中对此进行了讨论:
该数据集有两个异常簇,位于一个大的异常簇附近
中心的法线点簇。有干扰正常
异常簇周围的点,异常簇为
在这个4096个实例的样本中,密度高于正常点。图形
4(b)显示了原始数据128个实例的子样本。这个
在子样本中可以清楚地识别异常簇。
围绕这两个异常簇的正常实例已被删除
清除,异常簇的大小变小
使它们更容易识别。使用整个示例时,iForest
报告AUC为0.67。使用128的子采样大小时,iForest
达到0.91的AUC
隔离林不是一个完美的算法,需要针对特定数据调整参数。它甚至可能在某些数据集上表现不佳。如果您想考虑其他方法,也包括在<代码> SKEXCED>代码>中。您还可以组合多种方法(集成)
在这里你可以找到许多不同的方法。引用原文: iTrees的隔离特性使其能够构建部分 在某种程度上,模型和利用子抽样在实际应用中是不可行的 现有方法。因为大部分的iTree都能隔离正常的 异常检测不需要点不需要这样做 构建。小样本量产生更好的iTrees,因为 沼泽和掩蔽效果减少 从您的问题中,我有一种感觉,您混淆了数据集的大小和从中获取的用于构建iTree的样本的大小。隔离林可以处理非常大的数据集。当它对它们进行采样时,效果更好 原始文件在第3章中对此进行了讨论: 该数据集有两个异常簇,位于一个大的异常簇附近 中心的法线点簇。有干扰正常 异常簇周围的点,异常簇为 在这个4096个实例的样本中,密度高于正常点。图形 4(b)显示了原始数据128个实例的子样本。这个 在子样本中可以清楚地识别异常簇。 围绕这两个异常簇的正常实例已被删除 清除,异常簇的大小变小 使它们更容易识别。使用整个示例时,iForest 报告AUC为0.67。使用128的子采样大小时,iForest 达到0.91的AUC 隔离林不是一个完美的算法,需要针对特定数据调整参数。它甚至可能在某些数据集上表现不佳。如果您想考虑其他方法,也包括在<代码> SKEXCED>代码>中。您还可以组合多种方法(集成)
在这里你可以找到许多不同的方法。谢谢@igrinis。我理解数据集的大小与构建iTree所需的样本大小之间的差异。sklearn实现中的默认样本数为256。对超过100万行的数据集使用默认值可以生成准确的结果。覆盖max_样本以使用整个数据集似乎可以产生更好的结果。我不能使用局部异常因子法,因为它没有预测方法,我需要检测历史数据上的异常。覆盖max_样本是一种不好的做法,还是这样可以?我还介绍了您列出的其他一些sklearn方法,隔离林似乎是最准确的。正如我前面提到的,隔离林作为任何其他算法都需要找到适合您的数据的最佳参数。如果对于您的数据来说,最好设置100k的样本大小,或者取整个数据集的20%,这是非常好的。这正是函数允许您更改默认参数的原因。默认值是为某些其他数据设置的,很可能不适合您的数据。不要害怕实验。真正的成功标准只是你的最终结果。谢谢@igrinis。我理解数据集的大小与构建iTree所需的样本大小之间的差异。sklearn实现中的默认样本数为256。对超过100万行的数据集使用默认值可以生成准确的结果。将最大样本覆盖为