Если вы укажете 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