7

Scikit-Learn 的IsolationForest类有一个方法decision_function可以返回输入样本的异常分数。但是,文档并没有说明这些分数的可能范围是多少,只是说“[分数]越低,越不正常。”

编辑:阅读 jmunsch 的评论后,我再次查看了源代码,这是我更新后的猜测:如果分数公式中的指数始终为负,那么分数将始终介于 0 和 1 之间,这意味着返回的范围是 [- 0.5, 0.5] 因为0.5 - scores由方法返回。但我不确定指数是否总是负数。

4

1 回答 1

5

在 Scikit-Learn 的 IsolationForest 中,decision_function 返回 [-0.5, 0.5] 范围内的值,其中 -.5 是最异常的。

或者我相信并且从未见过其他证据。Scikit-Learn 的 IsolationForest 的文档参考了Liu 等人的论文 Isolation-based Anomaly Detection。其中等式 2 定义了异常分数。在论文中,异常分数介于 0 和 1 之间,其中 1 是最异常的。在第 267 行引用的分数函数中,变量 depths.mean(axis=1) 对应于 E(h(x)),_average_path_length(self.max_samples_)) 对应于论文中的 c(psi)。因此,在第 272 行,当函数返回 1 减去分数时,我们得到 [-0.5, 0.5] 的边界。

编辑/奖励: 有效隔离森林的预测方法只是将决策函数值与存储在model.threshold_. 因此,在对某些数据调用模型的 predict 方法后,异常项是符合条件的相同项:model.decision_function(data) < model.threshold_.

于 2018-08-16T18:06:40.210 回答