我正在使用R v3.3.2和Caret 6.0.71(即最新版本)来构建逻辑回归分类器。我使用confusionMatrix函数创建统计数据来判断其性能。
logRegConfMat< - confusionMatrix(logRegPrediction,valData [,“Seen”])
准确度:0.7239
灵敏度:0.3333
特异性:0.9213
我的数据中的目标值(Seen)使用1表示true,0表示false。我假设混淆矩阵中的参考(地面实况)列和预测(分类器)行遵循相同的约定。因此我的结果显示:
问题:为什么灵敏度为0.3333,特异性为0.9213?我原本以为它是相反的 - 见下文。
我不愿意相信R confusionMatrix函数中存在错误,因为没有任何报告,这似乎是一个重大错误。
关于计算特异性和敏感性的大多数参考文献将它们定义如下 - 即www.medcalc.org/calc/diagnostic_test.php
答案 0 :(得分:8)
根据文档?confusionMatrix
:
"如果只有两个因子级别,则第一级将用作 "积极" 。结果"
因此,在您的示例中,正面结果将是0
,评估指标将是错误的方式。要覆盖默认行为,可以将参数positive =
设置为正确的值,唉:
confusionMatrix(logRegPrediction, valData[,"Seen"], positive = "1")
答案 1 :(得分:0)
confusionMatrix(y_hat,y,positive =“ 1”)
将使用“ 1”作为肯定结果重新定义所有指标。例如,敏感性和特异性将被颠倒,但是它将仍然像以前一样显示混乱矩阵,即以(0,1)的顺序。可以通过重新排序类别的因子级别来纠正此问题,如下所示。
y_hat = factor(y_hat,levels(y_hat)[c(2,1)])
y = factor(y,level(y)[c(2,1)]
现在,矩阵将以(1、0)的顺序显示,并以“ 1”作为肯定结果,并且无需使用positive =“ 1”参数。