【问题标题】:R Confusion Matrix sensitivity and specificity labelingR混淆矩阵敏感性和特异性标记
【发布时间】:2017-05-17 12:12:01
【问题描述】:

我正在使用 R v3.3.2 和 Caret 6.0.71(即最新版本)来构建逻辑回归分类器。我正在使用confusionMatrix 函数来创建用于判断其性能的统计数据。

logRegConfMat

  • 参考 0,预测 0 = 30
  • 参考 1,预测 0 = 14
  • 参考 0,预测 1 = 60
  • 参考 1,预测 1 = 164

准确度:0.7239
灵敏度:0.3333
特异性:0.9213

我的数据(Seen)中的目标值使用 1 表示真,0 表示假。我假设混淆矩阵中的参考(基本事实)列和谓词(分类器)行遵循相同的约定。因此我的结果显示:

  • 真阴性 (TN) 30
  • 真阳性 (TP) 164
  • 假阴性 (FN) 14
  • 误报 (FP) 60

问题:为什么灵敏度为 0.3333,特异性为 0.9213?我会认为这是相反的方式 - 见下文。

我不愿意相信 R 的混淆矩阵函数中存在错误,因为没有任何报告,这似乎是一个重大错误。


大多数关于计算特异性和敏感性的参考文献将它们定义如下 - 即www.medcalc.org/calc/diagnostic_test.php

  • 灵敏度 = TP / (TP+FN) = 164/(164+14) = 0.9213
  • 特异性 = TN / (FP+TN) = 30/(60+30) = 0.3333

【问题讨论】:

    标签: r r-caret confusion-matrix


    【解决方案1】:

    confusionMatrix(y_hat, y, positive = "1")

    将使用“1”作为积极结果重新定义所有指标。例如灵敏度和特异性会颠倒过来,但它仍然会像以前一样显示混淆矩阵,即按照 (0, 1) 的顺序。这可以通过重新排序类的因子水平来纠正,如下所示。

    y_hat = 因子(y_hat, 水平(y_hat)[ c(2,1) ])

    y = 因子(y, 水平(y)[ c(2,1) ]

    现在矩阵将按照 (1, 0) 的顺序显示,“1”为正结果,无需使用 positive="1" 参数。

    【讨论】:

      【解决方案2】:

      根据文档?confusionMatrix

      "如果只有两个因子水平,第一个水平将用作 “积极”的结果。”

      因此,在您的示例中,肯定结果将是 0,而评估指标将是错误的。要覆盖默认行为,您可以将参数 positive = 设置为正确的值,唉:

       confusionMatrix(logRegPrediction, valData[,"Seen"], positive = "1")
      

      【讨论】:

      • 谢谢 - 我从包作者 Max Kukn 那里得到了同样的答案。我会建议任何使用此函数的人明确给出肯定的论点以避免此类问题。
      • @mtoto 非常感谢,我花了几个小时思考这个问题
      • 哇,一个非常危险且容易被忽视的关键知识——我认为有很多人只是假设它知道 1=肯定,这肯定让我难过
      猜你喜欢
      • 1970-01-01
      • 2019-01-01
      • 2020-05-21
      • 2020-08-23
      • 2020-07-20
      • 2021-11-13
      • 2023-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多