Eksperymentuję z algorytmem maszyny do zwiększania gradientu za pośrednictwem caret
pakietu w R.
Korzystając z małego zestawu danych o przyjęciach na studia, uruchomiłem następujący kod:
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)
i zdziwiłem się, że dokładność krzyżowej walidacji modelu spadła, a nie wzrosła wraz ze wzrostem liczby iteracji przypominających, osiągając minimalną dokładność około .59 przy ~ 450 000 iteracji.
Czy nieprawidłowo zaimplementowałem algorytm GBM?
EDYCJA: Zgodnie z sugestią Underminera, ponownie uruchomiłem powyższy caret
kod, ale skupiłem się na uruchomieniu od 100 do 5000 iteracji zwiększających:
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)
Wynikowy wykres pokazuje, że dokładność faktycznie osiąga wartość szczytową przy prawie 0,705 przy ~ 1800 iteracjach:
Co ciekawe, dokładność nie osiągnęła plateau przy ~ .70, ale spadła po 5000 iteracji.
źródło
Kody do odtworzenia podobnego wyniku bez wyszukiwania siatki,
źródło
Pakiet gbm ma funkcję do oszacowania optymalnej liczby iteracji (= liczba drzew lub liczba funkcji bazowych),
Nie potrzebujesz do tego pociągu Careta.
źródło