【问题标题】:H2O isolation forest -- scores greater than 1H2O 隔离林——分数大于 1
【发布时间】:2020-10-07 17:36:35
【问题描述】:

当模型应用于测试集时,H2O 中的隔离森林 (3.30.0.1, R 3.6.1) 计算的分数大于 1。这是重现分数大于 1 的代码。看起来 h2o 没有使用原始论文中使用的规范化 [https://cs.nju.edu.cn/zhouzh/zhouzh.files/publication/icdm08b.pdf?q =isolation-forest] 即 score=2^(-mean length/c(n)),c(n) 对于 n>0 总是正的,所以分数应该总是小于 1。

隔离林的其他实现对同一数据集产生的分数小于 1。

下载traintest 数据文件。

library(data.table)
library(h2o)
h2o.init()
#import data
train<-h2o.importFile('train.csv')
test<-h2o.importFile('test.csv')
#Train model
model <- h2o.isolationForest(training_frame = train)
# Calculate score
scores <- h2o.predict(model,test)
max(scores[,1])

【问题讨论】:

  • 这里有什么问题?你是在问为什么分数大于 1?
  • 我从原论文的理解是分数应该小于1。

标签: h2o outliers unsupervised-learning


【解决方案1】:

如果您的问题是为什么测试集中某些行的预测值大于 1,那么这是由于测试值具有较短的 mean_lengths。 IE。与训练数据相比,隔离它们所需的分割次数少于平均水平。请记住,隔离林使用一组树木(不仅仅是一棵)。因此,如果您有比训练更独特的记录(异常),那么您的预测值可能大于 1(或 mean_length 比正常值短)。

您可以通过查看测试数据中 predict 大于 1 的行来看到这一点:

scores[scores[,1] &gt; 1, ]

   predict mean_length
1 1.232558        3.82
2 1.023256        4.36
3 1.069767        4.24
4 1.286822        3.68

此外,您可以看到,您的训练数据的所有行的平均长度为 4.42(大于您的测试数据中的平均值,上面的 mean_lengths)

scores_train <- h2o.predict(model,train) mean(scores_train[,'mean_length'])

4.42

查看this post 了解更多关于解释隔离林的信息。

【讨论】:

  • 感谢分享笔记本。我可能是错的,但看起来 h2o 没有使用原始论文中使用的归一化 [cs.nju.edu.cn/zhouzh/zhouzh.files/publication/… 这是 score=2^(-mean length/c(n)), c(n) 总是对 n> 为正0,因此分数应始终小于 1。
【解决方案2】:

Neema 指出 h2o 正在使用最小/最大路径长度进行归一化,这使得得分大于 1 成为可能。

[https://support.h2o.ai/support/tickets/97280]

【讨论】:

    猜你喜欢
    • 2020-05-24
    • 2019-07-20
    • 1970-01-01
    • 2019-02-16
    • 1970-01-01
    • 2020-05-28
    • 2020-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多