количество деревьев в h2o.gbm

в традиционном 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

У кого-нибудь есть похожая проблема? Как это решить? h2o.gbm намного быстрее, чем gbm, поэтому, если он может получить подробный результат для каждого дерева, это было бы здорово.


person Wei Li    schedule 30.08.2017    source источник
comment
чтобы предсказать, вы используете только модель в h2o.gbm.model n.tree не используется rdocumentation.org/packages/h2o/versions/2.8.1.1/topics/   -  person s.brunel    schedule 30.08.2017
comment
@s.brunel 2.8.1.1 очень старый. Последняя документация: docs.h2o.ai/h2o /latest-stable/h2o-docs/data-science/gbm.html   -  person Darren Cook    schedule 01.09.2017


Ответы (2)


Я не думаю, что 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 для радужной оболочки достаточно!

Кстати, если вашей настоящей целью было определить оптимальное количество деревьев для использования, включите раннюю остановку, и она сделает это автоматически. (Просто убедитесь, что вы используете как проверочные, так и тестовые фреймы данных.)

person Darren Cook    schedule 01.09.2017
comment
Пожалуйста, прокомментируйте, когда вы понизите голос, особенно если есть какая-то техническая неточность, которую необходимо исправить. (Я думал, что правильно ответил на вопрос в первом предложении.) - person Darren Cook; 04.09.2017

С 3.20.0.6 H2O поддерживает это. Вам нужен метод staged_predict_proba. Для моделей классификации он создает прогнозируемые вероятности классов после каждой итерации (дерева) для каждого наблюдения в вашей системе тестирования. Для регрессионных моделей (т. е. когда ответ является числовым), хотя и не задокументированным на самом деле, он выдает фактический прогноз для каждого наблюдения в вашем тестовом кадре.

Из этих прогнозов также легко вычислить различные показатели производительности (AUC, r2 и т. д.), предполагая, что это то, что вам нужно.

API-интерфейс Python:

staged_predict_proba = model.staged_predict_proba(test)

R API:

staged_predict_proba <- h2o.staged_predict_proba(model, prostate.test)
person nirvana-msu    schedule 03.12.2019