さて、関係覚え(偽陽性率)、T P R(真の陽性率)およびA C C(精度)。FPRTPRA CC
TPR = ∑ 真の陽性∑ 陽性の場合
FPR = ∑ 誤検知∑ 負の場合
A CC= TPR ⋅ Σ 陽性症例+ (1 - FPR )⋅ Σ 負の例∑ 陽性の症例+ ∑ 陰性の症例
A CCTPRFPR
A CC= TPR + 1 − FPR2
N−≫ N+
A CC(N−≫ N+)≈ 1 - FPR
A CCFPR
この例を参照してください。負の数は正の数の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)
の A UC は
1-sum(res$fpr[-12]*0.1)
#[1] 0.74608
一番下の行は、偽のモデル(tpr
この例では= 0)になるような方法で精度を最適化できることです。これは、精度が良い指標ではないため、結果の二分法は意思決定者に任されるべきです。
最適なしきい値は TPR = 1 − FPR これは、精度が最適でなくても、両方のエラーの重みが等しいためです。
不均衡なクラスがある場合、精度の最適化は簡単な場合があります(たとえば、全員を多数派クラスとして予測する)。
もう1つ、ほとんど翻訳できない A UCそのような精度推定値への測定。これらの質問を参照してください。
そして何よりも重要なのは、なぜより正確な分類器よりも精度の低い分類器の方がAUCが高いのでしょうか?