使用隔离森林进行数据异常检测时,我们是否应该仅使用正常数据或正常数据和异常数据的混合来训练模型?另外,对多变量数据进行异常检测的最佳算法是什么?我想要最小的误报。
注意:我知道减少误报是调整模型的问题,但我想知道最有效的算法。来自博客我已经了解到IsolationForest是最新,最有效的无监督异常检测算法之一。
答案 0 :(得分:0)
当前,scikit-learn v0.20.3
已实现isolation forests。 IForests在处理高维,多元数据方面相当出色:
“数据在随机选择的属性中的随机选择的分区点处使用轴平行切割递归地进行分区,以 将实例隔离为实例越来越少的节点 直到这些点被隔离到包含一个实例的单例节点中。” -Charu C. Aggarwal (in Chapter 5 of Outlier Analysis)
我不能说它会给出最小误报的事实,因为它实际上取决于许多因素,包括您的训练数据。据我所知,它可以很好地识别异常和/或离群值(即使是离散时间序列)。
您可以将contamination
参数设置为您的心脏想要的任何百分比,只要它是(0.,0.5)中的float
。
“数据集的污染程度,即数据集中异常值的比例。在用于定义决策函数的阈值时使用。”
默认值为0.1(或10%),因此您可以设置contamination=0.04
(4%)。
from sklearn.ensemble import IsolationForest
clf = IsolationForest(contamination=0.04)