R中的gbm:如何根据单个树计算预测?

时间:2019-06-15 07:35:45

标签: r gbm

在R包gbm中,如何根据各个树计算predict()的预测?

如果我正确理解了文档,则在single.tree=TRUE中使用predict()可以根据一棵或多棵单独的树进行预测。但是我看不到如何合并各个预测。我以为它们会与收缩一起添加到每棵随后的树上,但这似乎是不正确的。

示例:

library(gbm)

set.seed(1)

shr <- 0.1  # shrinkage value

gbm.iris <- gbm(Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width,
                data = iris, distribution = "multinomial",
                shrinkage = shr, bag.fraction = 1, n.trees = 10)

new.data <- data.frame(Sepal.Length = c(4.7, 4.9, 6.2, 7.1),
                       Sepal.Width = c(2.7, 2.3, 3.1, 3.2),
                       Petal.Length = c(2.5, 2.5, 3.5, 4.9),
                       Petal.Width = c(0.5, 0.8, 1.8, 1.6))

# How is predict(gbm.iris, newdata = new.data, n.trees = 2) calculated?

predict(gbm.iris, newdata = new.data, n.trees = 2)

## , , 2
##          setosa  versicolor  virginica
## [1,] -0.2903287  0.13823604 -0.2523327
## [2,] -0.2903287  0.13823604 -0.2523327
## [3,] -0.2903287 -0.06420611  0.5207189
## [4,] -0.2903287  0.13823604 -0.2523327

predict(gbm.iris, newdata = new.data, n.trees = 1) +
  shr*predict(gbm.iris, newdata = new.data, n.trees = 2, single.tree=TRUE)

## , , 1
##          setosa versicolor  virginica
## [1,] -0.1361764 0.04976673 -0.1558363
## [2,] -0.1361764 0.04976673 -0.1558363
## [3,] -0.1564206 0.12707189  0.2627465
## [4,] -0.1361764 0.04976673 -0.1558363

predict(gbm.iris, newdata = new.data, n.trees = 1) +
  predict(gbm.iris, newdata = new.data, n.trees = 2, single.tree=TRUE)

## , , 1
##           setosa versicolor   virginica
## [1,] -0.01176396 -0.1773327 -0.40307460
## [2,] -0.01176396 -0.1773327 -0.40307460
## [3,] -0.21420611  0.5957189  0.01550818
## [4,] -0.01176396 -0.1773327 -0.40307460

我正在使用gbm版本2.1.5。谢谢。

1 个答案:

答案 0 :(得分:0)

因为这里没有答案,所以我在gbm GitHub页面上问了这个问题和一个相关问题:

https://github.com/gbm-developers/gbm/issues/41

https://github.com/gbm-developers/gbm/issues/42

其中一位作者格雷格·里奇韦(Greg Ridgeway)回答了另一个问题(上面的第一个链接):

  

我建议切换到github上发布的gbm3。而且我不会   建议使用gbm的多项式选项...我认为这从来没有   调试并出现了许多问题。我们实际上已将其从   gbm3。

由此我得出结论,示例中的意外行为可能是错误的结果。