R: отслеживание предсказания gbm с pretty.gbm.tree

Я хочу понять как predict.gbm предсказывает. Вот воспроизводимый пример

library(gbm)

set.seed(1)
x <- factor(c("b","c","d","f","b","f"))
y <- c(0, 0, 0, 1, 1, 1)

df <- data.frame(x = x, y = y)

M <- gbm(y ~ x, data = df, 
         distribution = "gaussian",
         n.trees = 3,
         interaction.depth = 1,
         n.minobsinnode = 1, 
         shrinkage = 1,
         bag.fraction = 1)

print(df)
pretty.gbm.tree(M, i = 1)

predict.gbm(M,data.frame("x" = "b"), 1)
predict.gbm(M,data.frame("x" = "f"), 1)

Печать

> print(df)
  x y
1 b 0
2 c 0
3 d 0
4 f 1
5 b 1
6 f 1
> pretty.gbm.tree(M, i = 1)
  SplitVar SplitCodePred LeftNode RightNode MissingNode ErrorReduction Weight Prediction
0        0          0.00        1         2           3           0.75      6       0.00
1       -1         -0.50       -1        -1          -1           0.00      2      -0.50
2       -1          0.25       -1        -1          -1           0.00      4       0.25
3       -1          0.00       -1        -1          -1           0.00      6       0.00
> 
> predict.gbm(M,data.frame("x" = "b"), 1)
[1] 0.75
> predict.gbm(M,data.frame("x" = "f"), 1)
[1] 0.75

Дерево решений спрашивает, относится ли наблюдение к категории b или нет (поскольку уровень b соответствует SplitCodePred нуль).

Предсказание gbm должно быть средним значением y, добавленным с предсказанием узла этого дерева. Таким образом, предсказание gbm нового "b" составляет 0,5 + 0,25 = 0,75. Тем не менее, предсказание gbm нового "f" должно быть 0,5 + (-0,50) = 0, но здесь это не так. Почему прогноз для нового "f" 0,75 вместо 0?

0 ответов

Другие вопросы по тегам