FPRTPRACC
TPR=∑True positive∑Positive cases
FPR=∑False positive∑Negative cases
ACC=TPR⋅∑Positive cases+(1−FPR)⋅∑Negative cases∑Positive cases+∑Negative cases
ACCTPRFPR
ACC=TPR+1−FPR2
N−≫N+
ACC(N−≫N+)≈1−FPR
ACCFPR
इस उदाहरण को देखें, निगेटिव पोज़िटिव 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
अधिकतम हो।
और यहाँ आरओसी है, सटीकता के साथ एनोटेट।
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)
AUC
1-sum(res$fpr[-12]*0.1)
#[1] 0.74608
लब्बोलुआब यह है कि आप एक तरह से सटीकता का अनुकूलन कर सकते हैं जिसके परिणामस्वरूप एक फर्जी मॉडल ( tpr
मेरे उदाहरण में = 0) है। ऐसा इसलिए है क्योंकि सटीकता एक अच्छा मीट्रिक नहीं है, परिणाम का द्विभाजन निर्णयकर्ता के लिए छोड़ दिया जाना चाहिए।
TPR=1−FPR
जब आपके पास असंतुलित कक्षाएं होती हैं, तो अनुकूलन सटीकता तुच्छ हो सकती है (उदाहरण के लिए सभी को बहुसंख्यक वर्ग के रूप में भविष्यवाणी करें)।
AUC
और सभी के लिए सबसे महत्वपूर्ण: AUC एक क्लासिफायरियर के लिए उच्च क्यों है जो एक से अधिक सटीक है जो कि अधिक सटीक है?