gbm в R: как рассчитываются прогнозы по отдельным деревьям? - PullRequest
0 голосов
/ 15 июня 2019

В пакете 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 голосов
/ 29 июня 2019

Поскольку здесь не было ответов, я задал этот вопрос и связанный с ним вопрос на странице GitHub:

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

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

Один изавторы, Грег Риджуэй, дали этот ответ на другой вопрос (первая ссылка выше):

Я бы порекомендовал перейти на gbm3, размещенный на github.И я бы не рекомендовал использовать полиномиальную опцию gbm ... Я не думаю, что она когда-либо была отлажена и имела ряд проблем.Мы фактически удалили его из gbm3.

Из этого я заключаю, что неожиданное поведение в моем примере, вероятно, было результатом ошибки.

...