Как получить вектор с переменной ответа от gbm, соответствующей обучающей фракции? - PullRequest
0 голосов
/ 22 марта 2020

Я использую функцию gbm (из пакета GBM R) и устанавливаю опцию train.fraction на 0.7. Я хотел бы получить вектор с переменной ответа, соответствующей этому подмножеству. Я, хотя это должно быть сохранено в одной из переменных выходного объекта gbm, но я не нашел его, и я не знаю, есть ли способ получить его. Используемая фракция данных сохраняется в gbm.result $ data $ x.ordered, но она не включает переменную ответа. Извиняюсь, если у этого есть очень очевидный ответ.

1 Ответ

0 голосов
/ 27 марта 2020

Если вы укажете training.fraction = 0,7

, вам понадобятся первые 0,7 * nrows ваших данных:

train.fraction: The first ‘train.fraction * nrows(data)’ observations
          are used to fit the ‘gbm’ and the remainder are used for
          computing out-of-sample estimates of the loss function.

Мы можем проверить это, проверив ошибка обучения и действительная ошибка:

train.error: a vector of length equal to the number of fitted trees
          containing the value of the loss function for each boosting
          iteration evaluated on the training data

valid.error: a vector of length equal to the number of fitted trees
          containing the value of the loss function for each boosting
          iteration evaluated on the validation data

Например:

library(gbm)
set.seed(111)
data = iris[sample(nrow(iris)),]
data$Species=as.numeric(data$Species=="versicolor")

fit = gbm(Species ~ .,data=data,train.fraction=0.7,distribution="bernoulli")

Поскольку 0,7 * 150 = 105, мы напишем функцию для вычисления отклонения (можно обратиться к это для деривации) и проверьте соответствующее отклонение:

# here y is the observed label, 0 or 1
# P is the log-odds obtained from predict.gbm(..)

b_dev = function(y,P){-2*mean(y*P-log(1+exp(P)))}

fit$train.error[length(fit$train.error)]
[1] 0.1408239

b_dev(data$Species[1:105],predict(fit,data[1:105,],n.trees=fit$n.trees))
[1] 0.1408239

fit$valid.error[100]
[1] 0.365474
b_dev(data$Species[106:150],predict(fit,data[106:150,],n.trees=fit$n.trees))
[1] 0.365474
...