我为诊断系统构建了ROC曲线。然后非参数地将曲线下的面积估计为AUC = 0.89。当我尝试在最佳阈值设置(最接近点(0,1)的点)上计算精度时,诊断系统的精度为0.8,小于AUC!当我在另一个阈值设置(与最佳阈值相差很远)下检查精度时,我得到的精度等于0.92。是否可以使诊断系统在最佳阈值设置下的准确度低于另一个阈值的准确度,并且也低于曲线下的面积?请参阅所附图片。
我为诊断系统构建了ROC曲线。然后非参数地将曲线下的面积估计为AUC = 0.89。当我尝试在最佳阈值设置(最接近点(0,1)的点)上计算精度时,诊断系统的精度为0.8,小于AUC!当我在另一个阈值设置(与最佳阈值相差很远)下检查精度时,我得到的精度等于0.92。是否可以使诊断系统在最佳阈值设置下的准确度低于另一个阈值的准确度,并且也低于曲线下的面积?请参阅所附图片。
Answers:
好的,请记住(假阳性率),(真阳性率)和(准确性)之间的关系:T P R A C C
因此,可以表示为和的加权平均值。如果负数和正数相同:
但是如果怎么办?然后: 因此,在这种情况下,最大发生在最小
参见此示例,负数大于正数1000:1。
data = c(rnorm(10L), rnorm(10000L)+1)
lab = c(rep(1, 10L), rep(-1, 10000L))
plot(data, lab, col = lab + 3)
tresh = c(-10, data[lab == 1], 10)
do.call(function(x) abline(v = x, col = "gray"), list(tresh))
pred = lapply(tresh, function (x) ifelse(data <= x, 1, -1))
res = data.frame(
acc = sapply(pred, function(x) sum(x == lab)/length(lab)),
tpr = sapply(pred, function(x) sum(lab == x & x == 1)/sum(lab == 1)),
fpr = sapply(pred, function(x) sum(lab != x & x == 1)/sum(lab != 1))
)
res[order(res$acc),]
#> res[order(res$acc),]
# acc tpr fpr
#12 0.000999001 1.0 1.0000
#11 0.189110889 1.0 0.8117
#9 0.500099900 0.9 0.5003
#2 0.757742258 0.8 0.2423
#5 0.763136863 0.7 0.2368
#4 0.792007992 0.6 0.2078
#10 0.807292707 0.5 0.1924
#3 0.884215784 0.4 0.1153
#7 0.890709291 0.3 0.1087
#6 0.903096903 0.2 0.0962
#8 0.971428571 0.1 0.0277
#1 0.999000999 0.0 0.0000
请参阅,当fpr
为0时acc
为最大值。
这是ROC,带有注释的准确性。
plot(sort(res$fpr), sort(res$tpr), type = "S", ylab = "TPR", xlab = "FPR")
text(sort(res$fpr), sort(res$tpr), pos = 4L, lab = round(res$acc[order(res$fpr)], 3L))
abline(a = 0, b = 1)
abline(a = 1, b = -1)
1-sum(res$fpr[-12]*0.1)
#[1] 0.74608
最重要的是,您可以通过生成伪造模型的方式来优化精度(tpr
在我的示例中= 0)。那是因为准确性不是一个好的指标,结果的二分法应该留给决策者。
当您的班级不平衡时,优化准确性可能是微不足道的(例如,将所有人预测为多数班)。
最重要的一点是:为什么分类准确率较低的分类器的AUC高于准确分类器的AUC?