Scikit-Learn 的IsolationForest类有一个方法decision_function
可以返回输入样本的异常分数。但是,文档并没有说明这些分数的可能范围是多少,只是说“[分数]越低,越不正常。”
编辑:阅读 jmunsch 的评论后,我再次查看了源代码,这是我更新后的猜测:如果分数公式中的指数始终为负,那么分数将始终介于 0 和 1 之间,这意味着返回的范围是 [- 0.5, 0.5] 因为0.5 - scores
由方法返回。但我不确定指数是否总是负数。
Scikit-Learn 的IsolationForest类有一个方法decision_function
可以返回输入样本的异常分数。但是,文档并没有说明这些分数的可能范围是多少,只是说“[分数]越低,越不正常。”
编辑:阅读 jmunsch 的评论后,我再次查看了源代码,这是我更新后的猜测:如果分数公式中的指数始终为负,那么分数将始终介于 0 和 1 之间,这意味着返回的范围是 [- 0.5, 0.5] 因为0.5 - scores
由方法返回。但我不确定指数是否总是负数。
在 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_
.