【问题标题】:What is the range of Scikit-Learn's IsolationForest decision_function scores?Scikit-Learn Isolation Forest 决策函数分数的范围是多少?
【发布时间】:2017-07-20 19:44:27
【问题描述】:

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

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

【问题讨论】:

  • @jmunsch 我忘了在我的问题中提到我确实查看了源代码,但我不清楚范围是多少。如果指数始终为负,则分数将始终介于 0 和 1 之间,这意味着范围为 [-0.5, 0.5]。但我不确定指数是否总是负数。

标签: python scikit-learn anomaly-detection


【解决方案1】:

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

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

编辑/奖励: 隔离森林的有效预测方法只是将decision_function 值与存储在model.threshold_ 中的阈值进行比较。所以在对某些数据调用模型的 predict 方法后,异常项是符合条件的相同项:model.decision_function(data) < model.threshold_

【讨论】:

    猜你喜欢
    • 2018-04-02
    • 2016-08-12
    • 2014-02-18
    • 2023-04-07
    • 2017-02-23
    • 2020-04-05
    • 2014-06-27
    • 2017-03-26
    相关资源
    最近更新 更多