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)
そして、驚いたことに、モデルの相互検証の精度は、ブースティング反復の数が増えるにつれて増加するのではなく減少し、約450,000反復で約.59の最小精度に達することに気付きました。
GBMアルゴリズムを誤って実装しましたか?
編集:Underminerの提案に従って、上記のcaret
コードを再実行しましたが、100〜5,000 回のブースティング反復の実行に焦点を当てました。
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)
結果のプロットは、精度が実際に〜1,800回の反復でほぼ.705でピークに達することを示しています。
興味深いのは、精度が〜.70で横ばいにならず、代わりに5,000回の反復で低下したことです。