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?