GBM分类与插入包

时间:2014-01-20 19:14:49

标签: r r-caret

当使用插入符号列函数拟合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计算?这似乎很棘手,因为使用任何汇总函数都会传递已经是二进制的预测。

1 个答案:

答案 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()

最高