当模型应用于测试集时,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的分数。
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])发布于 2020-06-24 11:01:13
内马指出,h2o使用最小/最大路径长度进行归一化,这使得分数大于1成为可能。
https://support.h2o.ai/support/tickets/97280
发布于 2020-06-19 15:31:54
如果您的问题是为什么测试集中某些行的预测值大于1,那么这是由于测试值具有较短的mean_lengths。即,与训练数据相比,需要少于平均分裂来分离它们。请记住,隔离森林使用的是一组树(而不仅仅是一棵)。因此,如果你有比训练(异常)更独特的记录,那么你的预测值可能会大于1(或者mean_length比正常短)。
您可以通过查看测试数据中predict大于1的行来了解这一点:
scores[scores[,1] > 1, ]
predict mean_length
1 1.232558 3.82
2 1.023256 4.36
3 1.069767 4.24
4 1.286822 3.68此外,您还可以看到您的训练数据的所有行的平均mean_length为4.42 (这比上面的测试数据mean_lengths中的值要大)
scores_train <- h2o.predict(model,train) mean(scores_train[,'mean_length'])
4.42请查看this post,了解有关解释隔离森林的更多信息。
https://stackoverflow.com/questions/62436821
复制相似问题