我正在使用隔离林算法对时间序列数据进行无监督异常检测任务。我正在用Python开发它,更详细的是使用scikit-learn。
我在这方面发现了很多例子,但不太清楚的是如何在IsolationForest的实例化过程中设置污染参数。
看看文档,污染是
数据集的污染量,即数据集中异常值的比例。
我应该使用一些统计技术来确定这个百分比吗?
发布于 2019-07-02 02:50:06
我认为答案是“视情况而定”。当得分数据点被认为是一个离群点时,contamination参数简单地控制决策函数的阈值。它对模型本身没有影响。
根据您的应用程序,使用一些统计分析来获得污染的粗略估计是有意义的。(如果你能缩小范围,那么你就不需要隔离森林了.)
通常,我会说,这是一些商业预期的信息。就像“我们期望看到的速度与我们的竞争对手,谁报告了一个x”。
或者您期望数据集中有一定数量的异常值。然后,您可以使用原始分数来找到给出该数字的阈值,并在将模型应用于新数据时追溯地设置contamination参数。
发布于 2021-11-19 09:05:20
参数contamination是(怀疑)数据集中的异常值的“共享”。考虑一下这个例子:
from sklearn.ensemble import IsolationForest
x = [[-1], [2], [3], [5], [7], [10], [12], [20], [30], [100]]使用IsolationForest和contamination=0.1可以识别“前10%”的异常值。
clf = IsolationForest(contamination=0.1).fit(x)
clf.predict(x)
> [ 1 1 1 1 1 1 1 1 1 -1]-1表示这里有一个“离群点”。
设置contamination=0.2会产生“十分之二”的值,这些值被识别为异常值。
clf = IsolationForest(contamination=0.2).fit(x)
clf.predict(x)
> [1 1 1 1 1 1 1 1 -1 -1]参数contamination通常需要进行调优(或者其他假设需要进行调整)。调优后,通常会将其设置为优化顶级估值器的某个目标的值(在使用IsolationForest删除异常值之后)。
发布于 2021-11-19 08:35:32
然后,我用预测的结果掩盖我的数据,用零来计算错误的恢复;通过计数零,我可以得到污染的估计。
https://datascience.stackexchange.com/questions/54873
复制相似问题