当使用 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 计算?这看起来很棘手,因为无论使用什么汇总函数都会传递已经是二进制的预测。
“因为无论使用什么汇总函数,都会传递已经是二进制的预测”
事实并非如此。
它不能使用这些类来计算 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()
最大限度