在传统的gbm中,我们可以使用 predict.gbm(model,newsdata = ...,n.tree = ...)
这样我就可以将测试数据的结果与不同数量的树进行比较。
在h2o.gbm中,虽然它有n.tree设置,但它似乎对结果没有任何影响。它与默认模型完全相同:
h2o.test.pred <- as.vector(h2o.predict(h2o.gbm.model, newdata=test.frame, n.tree=100))
R2(h2o.test.pred, test.mat$y)
[1] -0.00714109
h2o.test.pred <- as.vector(h2o.predict(h2o.gbm.model, newdata=test.frame, n.tree=10))
> R2(h2o.test.pred, test.mat$y)
[1] -0.00714109
anybod有类似的问题吗?怎么解决? h2o.gbm比gbm快得多,所以如果它能得到每棵树的详细结果那么棒。
答案 0 :(得分:1)
我不认为H2O支持你所描述的内容。
但是,如果你所追求的是使用树木的数量来获得性能,那么可以在模型构建时完成。
library(h2o)
h2o.init()
iris <- as.h2o(iris)
parts <- h2o.splitFrame(iris,c(0.8,0.1))
train <- parts[[1]]
valid <- parts[[2]]
test <- parts[[3]]
m <- h2o.gbm(1:4, 5, train,
validation_frame = valid,
ntrees = 100, #Max desired
score_tree_interval = 1)
h2o.scoreHistory(m)
plot(m)
分数历史记录将在添加每个新树后显示评估。 plot(m)
会显示此图表。看起来20对于虹膜来说已经足够了!
答案 1 :(得分:0)
截至3.20.0.6
H2O does support。您正在寻找的方法是
staged_predict_proba。对于分类模型,它会在每次迭代(树)之后针对测试框架中的每个观察结果生成预测的类概率。对于回归模型(即,当响应为数值形式时),尽管没有真正记录,但它会为测试框架中的每个观察结果生成实际的预测。
根据这些预测,假设您正在追求的那样,计算各种性能指标(AUC,r2等)也很容易。
Python API:
staged_predict_proba = model.staged_predict_proba(test)
R API:
staged_predict_proba <- h2o.staged_predict_proba(model, prostate.test)