Sto sperimentando l'algoritmo della macchina per aumentare il gradiente tramite il caret
pacchetto in R.
Utilizzando un piccolo set di dati di ammissione al college, ho eseguito il seguente codice:
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 ho scoperto con mia sorpresa che l'accuratezza della validazione incrociata del modello è diminuita anziché aumentata con l'aumentare del numero di iterazioni di boosting, raggiungendo una precisione minima di circa .59 a ~ 450.000 iterations.
Ho implementato erroneamente l'algoritmo GBM?
EDIT: seguendo il suggerimento di Underminer, ho rieseguito il caret
codice sopra ma mi sono concentrato sull'esecuzione da 100 a 5.000 iterazioni potenziate:
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)
Il diagramma risultante mostra che l'accuratezza raggiunge un picco di quasi .705 a ~ 1.800 iterazioni:
La cosa curiosa è che l'accuratezza non ha raggiunto il plateau a ~ .70 ma è invece diminuita dopo 5.000 iterazioni.