首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在这个最小的例子中gbm()给出的结果与h2o.gbm()不同?

为什么在这个最小的例子中gbm()给出的结果与h2o.gbm()不同?
EN

Stack Overflow用户
提问于 2016-12-18 22:52:12
回答 1查看 658关注 0票数 3

修补梯度提升,我注意到R的gbm包产生不同的结果与h2o在一个最小的例子。为什么?

数据

代码语言:javascript
复制
library(gbm)
library(h2o)

h2o.init()

train <- data.frame(
  X1 = factor(c("A", "A", "A", "B", "B")),
  X2 = factor(c("A", "A", "B", "B", "B")),
  Y = c(0, 1, 3, 4, 7)
)
  X1 X2 Y
1  A  A 0
2  A  A 1
3  A  B 3
4  B  B 4
5  B  B 7

gbm

代码语言:javascript
复制
# (gbm, 1 round, mae)
model.gbm <- gbm(
  Y ~ X1 + X2, data = train, distribution="laplace", n.tree = 1, shrinkage = 1, n.minobsinnode=1, bag.fraction=1, 
  interaction.depth = 1, verbose=TRUE
)
train$Pred.mae.gbm1 <- predict(model.gbm, newdata=train, n.trees=model.gbm$n.trees)

h2o

代码语言:javascript
复制
# (h2o, 1 round, mae)
model.h2o <- h2o.gbm(
  x=c("X1", "X2"), y="Y", training_frame=as.h2o(train), distribution="laplace", ntrees=1, max_depth=1, 
  learn_rate = 1, min_rows=1
)
train$Pred.mae.h2o1 <- as.data.frame(h2o.predict(model.h2o, as.h2o(train)))$predict

结果

代码语言:javascript
复制
train
  X1 X2 Y Pred.mae.gbm1 Pred.mae.h2o1
1  A  A 0           1.0           0.5
2  A  A 1           1.0           0.5
3  A  B 3           1.0           4.0
4  B  B 4           5.5           4.0
5  B  B 7           5.5           4.0
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-19 08:32:43

它们是完全独立的实现,我怀疑它们的优化或设计是否考虑到了使用它的方式(例如,一棵树,min_rows设置为1)。在这种情况下,看起来R的gbm使用了它的单一树来正确地学习"B“输入,而h2o.gbm则集中在"A”输入上。

当您开始使用实际数据和实际设置时,可能仍然存在差异。有很多参数是您没有接触到的(至少使用h2o.gbm(),这是我熟悉的参数)。还有一个随机元素:尝试seed到h2o.gbm()的100个值,以及R的gbm之前的一个常量set.seed(),您可能会在其中至少一个得到相同的结果。

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

https://stackoverflow.com/questions/41213721

复制
相关文章

相似问题

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