簡體   English   中英

如何使用 caret-GBM 解釋/調整多項分類?

[英]How to interpret/tune a multinomial classification with caret-GBM?

兩個問題

  1. 可視化 model 的錯誤
  2. 計算對數損失

(1) 我正在嘗試調整多項 GBM 分類器,但我不確定如何適應輸出。 我知道 LogLoss 是為了最小化,但在下面的 plot 中,對於任何范圍的迭代或樹,它似乎只會增加。

inTraining <- createDataPartition(final_data$label, p = 0.80, list = FALSE)
training <- final_data[inTraining,]
testing <- final_data[-inTraining,]

fitControl <- trainControl(method = "repeatedcv", number=10, repeats=3, verboseIter = FALSE, savePredictions = TRUE, classProbs = TRUE, summaryFunction= mnLogLoss)


gbmGrid1 <- expand.grid(.interaction.depth = (1:5)*2, .n.trees = (1:10)*25, .shrinkage = 0.1, .n.minobsinnode = 10)

gbmFit1 <- train(label~., data = training, method = "gbm", trControl=fitControl,
                   verbose = 1, metric = "ROC", tuneGrid = gbmGrid1)

plot(gbmFit1)

-- (2) 在相關說明中,當我嘗試直接調查 mnLogLoss 時,我得到了這個錯誤,這使我無法嘗試量化錯誤。

mnLogLoss(testing, levels(testing$label)) : 'lev' cannot be NULL

我懷疑您將學習率設置得太高。 因此,使用示例數據集:

final_data = iris
final_data$label=final_data$Species
final_data$Species=NULL
inTraining <- createDataPartition(final_data$label, p = 0.80, list = FALSE)
training <- final_data[inTraining,]
testing <- final_data[-inTraining,]

fitControl <- trainControl(method = "repeatedcv", number=10, repeats=3, 
verboseIter = FALSE, savePredictions = TRUE, classProbs = TRUE, summaryFunction= mnLogLoss)

gbmGrid1 <- expand.grid(.interaction.depth = 1:3, .n.trees = (1:10)*10, .shrinkage = 0.1, .n.minobsinnode = 10)

gbmFit1 <- train(label~., data = training, method = "gbm", trControl=fitControl,
                   verbose = 1, tuneGrid = gbmGrid1,metric="logLoss")

plot(gbmFit1)

在此處輸入圖像描述

與你的有點不同,但你可以看到 20 歲之后的上升趨勢。這真的取決於你的數據,但如果你的學習率很高,你至少會很快到達,之后的任何事情都會引入噪音。 你可以從Boehmke 的書中看到這個插圖,也可以查看更多基於統計的討論

在此處輸入圖像描述

讓我們降低學習率,你可以看到:

gbmGrid1 <- expand.grid(.interaction.depth = 1:3, .n.trees = (1:10)*10, .shrinkage = 0.01, .n.minobsinnode = 10)

gbmFit1 <- train(label~., data = training, method = "gbm", trControl=fitControl,
                   verbose = 1, tuneGrid = gbmGrid1,metric="logLoss")

plot(gbmFit1)

在此處輸入圖像描述

請注意,您很可能需要更多的迭代才能達到更低的損失,就像您在第一次看到的那樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM