0

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

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

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

4

1 回答 1

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)

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

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

最大限度

于 2014-01-21T03:13:22.937 回答