首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >H2O隔离林--分数大于1

H2O隔离林--分数大于1
EN

Stack Overflow用户
提问于 2020-06-18 03:21:35
回答 2查看 73关注 0票数 0

当模型应用于测试集时,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数据文件。

代码语言:javascript
复制
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])
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-24 11:01:13

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

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

票数 0
EN

Stack Overflow用户

发布于 2020-06-19 15:31:54

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

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

scores[scores[,1] > 1, ]

代码语言:javascript
复制
   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'])

代码语言:javascript
复制
4.42

请查看this post,了解有关解释隔离森林的更多信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62436821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档