在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。谢谢。
答案 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。
由此我得出结论,示例中的意外行为可能是错误的结果。