Я экспериментирую с алгоритмом машины повышения градиента через caret
пакет в R.
Используя небольшой набор данных для поступления в колледж, я запустил следующий код:
library(caret)
### Load admissions dataset. ###
mydata <- read.csv("http://www.ats.ucla.edu/stat/data/binary.csv")
### Create yes/no levels for admission. ###
mydata$admit_factor[mydata$admit==0] <- "no"
mydata$admit_factor[mydata$admit==1] <- "yes"
### Gradient boosting machine algorithm. ###
set.seed(123)
fitControl <- trainControl(method = 'cv', number = 5, summaryFunction=defaultSummary)
grid <- expand.grid(n.trees = seq(5000,1000000,5000), interaction.depth = 2, shrinkage = .001, n.minobsinnode = 20)
fit.gbm <- train(as.factor(admit_factor) ~ . - admit, data=mydata, method = 'gbm', trControl=fitControl, tuneGrid=grid, metric='Accuracy')
plot(fit.gbm)
и обнаружил, к моему удивлению, что точность перекрестной проверки модели уменьшилась, а не увеличилась, так как количество увеличивающих итераций увеличилось, достигнув минимальной точности около .59 при ~ 450 000 итераций.
Я неправильно реализовал алгоритм GBM?
РЕДАКТИРОВАТЬ: Следуя предложению Underminer, я перезапустил приведенный выше caret
код, но сосредоточился на выполнении от 100 до 5000 повышающих итераций:
set.seed(123)
fitControl <- trainControl(method = 'cv', number = 5, summaryFunction=defaultSummary)
grid <- expand.grid(n.trees = seq(100,5000,100), interaction.depth = 2, shrinkage = .001, n.minobsinnode = 20)
fit.gbm <- train(as.factor(admit_factor) ~ . - admit, data=mydata, method = 'gbm', trControl=fitControl, tuneGrid=grid, metric='Accuracy')
plot(fit.gbm)
Полученный график показывает, что точность на самом деле достигает максимума при 0,705 при ~ 1800 итерациях:
Любопытно, что точность не достигла плато в ~ 0,70, а снизилась после 5000 итераций.