R 中 h2o 包中的 predict.H2OModel() 是不是为 h2o.randomForest() 模型提供 OOB 预测?

Posted

技术标签:

【中文标题】R 中 h2o 包中的 predict.H2OModel() 是不是为 h2o.randomForest() 模型提供 OOB 预测?【英文标题】:Does predict.H2OModel() from h2o package in R give OOB predictions for h2o.randomForest() models?R 中 h2o 包中的 predict.H2OModel() 是否为 h2o.randomForest() 模型提供 OOB 预测? 【发布时间】:2018-10-31 16:26:36 【问题描述】:

我无法从文档中判断 R 中 h2o 包中的 predict.H2OModel() 函数是否为使用 h2o.randomForest() 构建的随机森林模型提供 OOB 预测。

事实上,在我尝试过的 3-4 个示例中,predict.H2OModel() 的结果似乎更接近来自 randomForest 包的 predict.randomForest() 的非 OOB 预测,而不是 OOB 的预测。

有人知道它们是否是 OOB 预测吗?如果没有,您知道如何获得 h2o.randomForest() 模型的 OOB 预测吗?

例子:

set.seed(123)
library(randomForest)
library(h2o)

data(mtcars)
d = mtcars[,c('mpg', 'cyl', 'disp', 'hp', 'wt' )]

## define some common settings for both random forests
n.trees=1000
mtry = 3  
min.node = 3

## prep for h2o.randomForest
h2o.init()  
d.h2o= as.h2o(d) 
x.names = colnames(d)[2:5] ## predictors

## fit both models
set.seed(123); 
rf  =     randomForest(mpg ~ .,                      data = d    ,  ntree=n.trees,   mtry = mtry, nodesize=min.node)
h2o = h2o.randomForest(y='mpg', x=x.names, training_frame = d.h2o, ntrees=n.trees, mtries = mtry, min_rows=min.node)

## Correct way and incorrect way of getting OOB predictions for a randomForest model. Not sure about h2o model. 
d$rf.oob.pred =           predict(rf)                  ## Gives OOB predictions
d$rf.pred     =           predict(rf , newdata=d    )  ## Doesn't give OOB predictions.
d$h2o.pred    = as.vector(predict(h2o, newdata=d.h2o)) ## Not sure if this is OOB or not.  

## d$h2o.pred seems more similar to d$rf.pred than d$rf.oob.pred, 
## suggesting that predict.H2OModel() might not give OOB predictions.
mean((d$rf.pred     - d$h2o.pred)^2)
mean((d$rf.oob.pred - d$h2o.pred)^2)

【问题讨论】:

【参考方案1】:

H2O 的 h2o.predict() 不提供 OOB 数据的预测。您必须使用 newdata = 参数指定要预测的数据集。因此,当您拥有 newdata=d.h2o 时,您将获得对您指定的 d.h2o 数据框的预测。

目前没有任何方法可以获取 oob 数据的预测。但是,有一个 jira ticket 可以指定您是否需要 oob 指标(请注意,此工单还链接到另一个工单,该工单有助于阐明当前如何报告随机森林的训练指标)。

【讨论】:

以上是关于R 中 h2o 包中的 predict.H2OModel() 是不是为 h2o.randomForest() 模型提供 OOB 预测?的主要内容,如果未能解决你的问题,请参考以下文章

不允许对 H2o 包中的字符串向量进行操作

从 R 中启动多个 h2o 集群

R:从 h2o.randomForest() 和 h2o.gbm() 绘制树

R中的H2O错误-无法连接到本地主机

使用 H2O 在 R 中平衡随机森林

R语言︱H2o深度学习的一些R语言实践——H2o包