我正在通过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迭代时达到约0.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次迭代后下降了。