混淆矩阵中的敏感度和特异度标签

8
我正在使用R v3.3.2和Caret 6.0.71(即最新版本)构建逻辑回归分类器。我使用confusionMatrix函数创建统计数据来评估其性能。 logRegConfMat <- confusionMatrix(logRegPrediction, valData[,"Seen"])
参考值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 confusionMatrix函数有错误,因为没有报告任何错误,这似乎是一个重大错误。

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

  • 敏感性 = TP / (TP+FN) = 164/(164+14) = 0.9213
  • 特异性 = TN / (FP+TN) = 30/(60+30) = 0.3333
2个回答

11

根据文档中的?confusionMatrix:

“如果只有两个因素级别,则第一个级别将被用作“正面”结果。”

因此,在您的示例中,正面结果将为0,评估指标将相反。要覆盖默认行为,可以设置参数positive =为正确的值:

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

谢谢 - 我从包作者Max Kukn那里得到了相同的答案。我建议使用此函数的任何人都明确给出正参数,以避免这种问题。 - wpqs
1
@mtoto 非常感谢,我花了几个小时思考这个问题。 - Diego
1
哇,这是一件非常危险易于忽视的关键知识 - 我认为很多人都只是假设它知道1=正数,而这确实让我困惑。 - James

0

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

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

y_hat = factor(y_hat, levels(y_hat)[c(2,1)])

y = factor(y, levels(y)[c(2,1)])

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接