使用 caret 包进行 GBM 分类

0 r r-caret

当使用 caret 的 train 函数拟合 GBM 分类模型时,函数 predictionFunction 基于 0.5 的概率阈值将概率预测转换为因子。

      out <- ifelse(gbmProb >= .5, modelFit$obsLevels[1], modelFit$obsLevels[2])
      ## to correspond to gbmClasses definition above
Run Code Online (Sandbox Code Playgroud)

如果用户试图最大化 ROC 曲线下的面积 (AUROC),这种转换似乎为时过早。虽然敏感性和特异性对应于单个概率阈值(因此需要因子预测),但我更喜欢使用 gbmPredict 的原始概率输出来计算 AUROC。根据我的经验,我很少关心分类模型的校准;我想要信息量最大的模型,无论模型预测“1”与“0”的概率阈值如何。是否可以将原始概率强制用于 AUROC 计算?这看起来很棘手,因为无论使用什么汇总函数都会传递已经是二进制的预测。

top*_*epo 5

“因为无论使用什么汇总函数,都会传递已经是二进制的预测”

事实并非如此。

它不能使用这些类来计算 ROC 曲线(除非您特意这样做)。请参阅下面的注释。

train 可以将类别预测为因素(使用您显示的内部代码)和/或类别概率。

例如,此代码将计算类概率并使用它们来获取 ROC 曲线下的面积:

library(caret)
library(mlbench)
data(Sonar)

ctrl <- trainControl(method = "cv", 
                     summaryFunction = twoClassSummary, 
                     classProbs = TRUE)
set.seed(1)
gbmTune <- train(Class ~ ., data = Sonar,
                 method = "gbm",
                 metric = "ROC",
                 verbose = FALSE,                    
                 trControl = ctrl)
Run Code Online (Sandbox Code Playgroud)

事实上,如果你省略这个classProbs = TRUE位,你会得到错误:

train()'s use of ROC codes requires class probabilities. See the classProbs option of trainControl()

最大限度