Machine-Learning
梯度提昇機器精度隨著迭代次數的增加而降低
我正在通過
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 次迭代時達到接近 0.705 的峰值:
奇怪的是,準確度並沒有穩定在 0.70 左右,而是在 5,000 次迭代後下降。
一般來說,提升誤差會隨著迭代次數的增加而增加,特別是當數據有噪聲時(例如錯誤標記的情況)。在不了解您的數據的情況下,我無法說這是否是您的問題
基本上,提升可以“專注於”正確預測包含錯誤信息的案例,並在此過程中降低其他更具實質性的案例的平均表現。
此鏈接(Boosting and Noise)顯示了比我能提供的問題更好的描述。
Long 和 Servedio 的這篇論文(隨機分類噪聲)提供了該問題的更多技術細節。