首页 文章

插入符号中的其他指标 - PPV,敏感性,特异性

提问于
浏览
2

我在R中使用插入符号进行逻辑回归:

ctrl <- trainControl(method = "repeatedcv", number = 10, repeats = 10, 
                       savePredictions = TRUE)

  mod_fit <- train(Y ~ .,  data=df, method="glm", family="binomial",
                   trControl = ctrl)

  print(mod_fit)

打印的默认指标是准确度和Cohen kappa . 我想提取匹配的指标,如敏感性,特异性,阳性预测值等,但我找不到一个简单的方法来做到这一点 . 提供了最终的模型,但它对所有数据进行了训练(据我从文档中可以看出),所以我不能用它来重新预测 .

混淆矩阵计算所有必需参数,但将其作为汇总函数传递不起作用:

ctrl <- trainControl(method = "repeatedcv", number = 10, repeats = 10, 
                       savePredictions = TRUE, summaryFunction = confusionMatrix)

  mod_fit <- train(Y ~ .,  data=df, method="glm", family="binomial",
                   trControl = ctrl)

Error: `data` and `reference` should be factors with the same levels. 
13.
stop("`data` and `reference` should be factors with the same levels.", 
    call. = FALSE) 
12.
confusionMatrix.default(testOutput, lev, method) 
11.
ctrl$summaryFunction(testOutput, lev, method)

除了准确性和kappa之外,有没有办法提取这些信息,或者以某种方式在插入符号列车返回的train_object中找到它?

提前致谢!

1 回答

  • 6

    Caret已经有汇总功能来输出你提到的所有指标:

    defaultSummary 输出准确度和Kappa
    twoClassSummary 输出AUC(ROC曲线下面积 - 见最后一行答案),灵敏度和特异性
    prSummary 输出精度和召回率

    为了获得组合的指标,你可以编写自己的汇总函数,它结合了这三个的输出:

    library(caret)
    MySummary  <- function(data, lev = NULL, model = NULL){
      a1 <- defaultSummary(data, lev, model)
      b1 <- twoClassSummary(data, lev, model)
      c1 <- prSummary(data, lev, model)
      out <- c(a1, b1, c1)
      out}
    

    让我们试试Sonar数据集:

    library(mlbench)
    data("Sonar")
    

    在定义列车控制时,重要的是设置 classProbs = TRUE ,因为这些度量中的一些(ROC和prAUC)不能基于预测的类别而是基于预测的概率来计算 .

    ctrl <- trainControl(method = "repeatedcv",
                         number = 10,
                         savePredictions = TRUE,
                         summaryFunction = MySummary,
                         classProbs = TRUE)
    

    现在适合您选择的型号:

    mod_fit <- train(Class ~.,
                     data = Sonar,
                     method = "rf",
                     trControl = ctrl)
    
    mod_fit$results
    #output
      mtry  Accuracy     Kappa       ROC      Sens      Spec       AUC Precision    Recall         F AccuracySD   KappaSD
    1    2 0.8364069 0.6666364 0.9454798 0.9280303 0.7333333 0.8683726 0.8121087 0.9280303 0.8621526 0.10570484 0.2162077
    2   31 0.8179870 0.6307880 0.9208081 0.8840909 0.7411111 0.8450612 0.8074942 0.8840909 0.8374326 0.06076222 0.1221844
    3   60 0.8034632 0.6017979 0.9049242 0.8659091 0.7311111 0.8332068 0.7966889 0.8659091 0.8229330 0.06795824 0.1369086
           ROCSD     SensSD    SpecSD      AUCSD PrecisionSD   RecallSD        FSD
    1 0.04393947 0.05727927 0.1948585 0.03410854  0.12717667 0.05727927 0.08482963
    2 0.04995650 0.11053858 0.1398657 0.04694993  0.09075782 0.11053858 0.05772388
    3 0.04965178 0.12047598 0.1387580 0.04820979  0.08951728 0.12047598 0.06715206
    

    在此输出中,ROC实际上是ROC曲线下的区域 - 通常称为AUC
    和AUC是所有截止值下精确回忆曲线下的面积 .

相关问题