当使用插入符号列函数拟合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计算?这似乎很棘手,因为使用任何汇总函数都会传递已经是二进制的预测。
答案 0 :(得分:4)
“因为使用任何汇总函数都会传递已经是二进制的预测”
绝对不是这样的。
它不能使用类来计算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()
最高