Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 你能在大样本上使用隔离林算法吗?_Python_Algorithm_Machine Learning_Scikit Learn_Sampling - Fatal编程技术网

Python 你能在大样本上使用隔离林算法吗?

Python 你能在大样本上使用隔离林算法吗?,python,algorithm,machine-learning,scikit-learn,sampling,Python,Algorithm,Machine Learning,Scikit Learn,Sampling,我一直在使用隔离林的scikit learnsklearn.ensemble.IsolationForest实现来检测我的数据集中的异常,这些异常的数据从100行到数百万行不等。它似乎工作得很好,我已经将max_samples重写为一个非常大的整数,以处理一些较大的数据集(基本上不使用子采样)。我注意到,较大的样本量会产生淹没和掩蔽的风险 如果隔离林似乎可以正常工作,那么在大样本量上使用它可以吗?我尝试使用较小的max_samples进行训练,测试产生了太多异常。我的数据真的开始增长,我想知道,

我一直在使用隔离林的scikit learn
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万行的数据集使用默认值可以生成准确的结果。将最大样本覆盖为