Machine-Learning

梯度提昇機器精度隨著迭代次數的增加而降低

  • June 1, 2016

我正在通過caretR 中的包試驗梯度提昇機算法。

使用一個小型大學招生數據集,我運行了以下代碼:

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 的這篇論文(隨機分類噪聲)提供了該問題的更多技術細節。

引用自:https://stats.stackexchange.com/questions/215790

comments powered by Disqus