【问题标题】:GBM classification with the caret package使用 caret 包进行 GBM 分类
【发布时间】:2014-02-10 02:39:19
【问题描述】:

在使用 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 计算?这似乎很棘手,因为无论使用什么汇总函数都会传递已经是二进制的预测。

【问题讨论】:

    标签: r r-caret


    【解决方案1】:

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

    绝对不是这样的。

    它不能使用类来计算 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()

    最大

    【讨论】:

    • 谢谢,马克斯。我没有意识到因子预测和类概率都包含在摘要函数的data 参数中,并且这允许 full AUROC 和 0.5 阈值敏感性/特异性被计算出来。
    • 另一个细节...类概率被添加为不同的列(每个类一个),因此请确保这些类是有效的 R 名称(例如不是"0""1" 等) . here 也是一个示例,它根据可能有用的类概率值重新定义类。
    猜你喜欢
    • 2014-07-22
    • 2020-09-20
    • 2020-10-12
    • 2013-03-14
    • 2015-04-22
    • 1970-01-01
    • 2013-03-13
    • 2017-09-12
    • 1970-01-01
    相关资源
    最近更新 更多