Estou experimentando o algoritmo da máquina de aumento de gradiente através do caret
pacote em R.
Usando um pequeno conjunto de dados de admissões de faculdade, executei o seguinte código:
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)
e descobri, para minha surpresa, que a precisão da validação cruzada do modelo diminuiu em vez de aumentar à medida que o número de iterações de aumento aumentou, atingindo uma precisão mínima de cerca de 0,59 em ~ 450.000 iterações.
Eu implementei o algoritmo GBM incorretamente?
EDIT: Seguindo a sugestão do Underminer, executei novamente o caret
código acima , mas foquei em executar de 100 a 5.000 iterações de aprimoramento:
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)
O gráfico resultante mostra que a precisão atinge o pico de aproximadamente 0,705 a ~ 1.800 iterações:
O curioso é que a precisão não alcançou ~ 0,70, mas declinou após 5.000 iterações.