Saya bereksperimen dengan algoritma mesin peningkat gradien melalui caret
paket di R.
Menggunakan dataset penerimaan perguruan tinggi kecil, saya menjalankan kode berikut:
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)
dan ternyata saya terkejut bahwa akurasi validasi silang model menurun daripada meningkat ketika jumlah peningkatan iterasi meningkat, mencapai akurasi minimum sekitar 0,59 pada ~ 450,000 iterasi.
Apakah saya salah menerapkan algoritma GBM?
EDIT: Mengikuti saran Underminer, saya telah menjalankan kembali caret
kode di atas tetapi fokus menjalankan 100 hingga 5.000 meningkatkan iterasi:
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)
Plot yang dihasilkan menunjukkan bahwa akurasi sebenarnya memuncak di hampir 0,705 di ~ 1.800 iterasi:
Yang aneh adalah bahwa keakuratannya tidak mencapai ~ 70, tetapi malah menurun setelah 5.000 iterasi.
sumber
Kode untuk mereproduksi hasil yang serupa, tanpa pencarian kotak,
sumber
Paket gbm memiliki fungsi untuk memperkirakan iterasi # yang optimal (= # pohon, atau # fungsi basis),
Anda tidak perlu kereta sisir untuk itu.
sumber