Setelah Anda memiliki probabilitas yang diprediksi, terserah Anda ambang mana yang ingin Anda gunakan. Anda dapat memilih ambang untuk mengoptimalkan sensitivitas, spesifisitas, atau ukuran apa pun yang paling penting dalam konteks aplikasi (beberapa info tambahan akan membantu di sini untuk jawaban yang lebih spesifik). Anda mungkin ingin melihat kurva ROC dan tindakan lain yang terkait dengan klasifikasi optimal.
Sunting: Untuk memperjelas jawaban ini, saya akan memberikan contoh. Jawaban sebenarnya adalah bahwa cutoff optimal tergantung pada sifat classifier apa yang penting dalam konteks aplikasi. Mari menjadi nilai yang benar untuk pengamatan saya , dan Y saya menjadi kelas diprediksi. Beberapa ukuran kinerja yang umum adalahYiiY^i
(1) Sensitivitas: - proporsi '1 yang diidentifikasi dengan benar sebagai begitu.P(Y^i=1|Yi=1)
P(Y^i=0|Yi=0)
P(Yi=Y^i)
(1) juga disebut True Positive Rate, (2) juga disebut True Negative Rate.
(1,1)
δ=[P(Yi=1|Y^i=1)−1]2+[P(Yi=0|Y^i=0)−1]2−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−√
δ(1,1)
Di bawah ini adalah contoh simulasi menggunakan prediksi dari model regresi logistik untuk mengklasifikasikan. Cutoff bervariasi untuk melihat apa cutoff memberikan classifier "terbaik" di bawah masing-masing tiga langkah ini. Dalam contoh ini, data berasal dari model regresi logistik dengan tiga prediktor (lihat kode R plot di bawah ini). Seperti yang Anda lihat dari contoh ini, batas "optimal" tergantung pada langkah mana yang paling penting - ini sepenuhnya tergantung pada aplikasi.
P(Yi=1|Y^i=1)P(Yi=0|Y^i=0)
# data y simulated from a logistic regression model
# with with three predictors, n=10000
x = matrix(rnorm(30000),10000,3)
lp = 0 + x[,1] - 1.42*x[2] + .67*x[,3] + 1.1*x[,1]*x[,2] - 1.5*x[,1]*x[,3] +2.2*x[,2]*x[,3] + x[,1]*x[,2]*x[,3]
p = 1/(1+exp(-lp))
y = runif(10000)<p
# fit a logistic regression model
mod = glm(y~x[,1]*x[,2]*x[,3],family="binomial")
# using a cutoff of cut, calculate sensitivity, specificity, and classification rate
perf = function(cut, mod, y)
{
yhat = (mod$fit>cut)
w = which(y==1)
sensitivity = mean( yhat[w] == 1 )
specificity = mean( yhat[-w] == 0 )
c.rate = mean( y==yhat )
d = cbind(sensitivity,specificity)-c(1,1)
d = sqrt( d[1]^2 + d[2]^2 )
out = t(as.matrix(c(sensitivity, specificity, c.rate,d)))
colnames(out) = c("sensitivity", "specificity", "c.rate", "distance")
return(out)
}
s = seq(.01,.99,length=1000)
OUT = matrix(0,1000,4)
for(i in 1:1000) OUT[i,]=perf(s[i],mod,y)
plot(s,OUT[,1],xlab="Cutoff",ylab="Value",cex.lab=1.5,cex.axis=1.5,ylim=c(0,1),type="l",lwd=2,axes=FALSE,col=2)
axis(1,seq(0,1,length=5),seq(0,1,length=5),cex.lab=1.5)
axis(2,seq(0,1,length=5),seq(0,1,length=5),cex.lab=1.5)
lines(s,OUT[,2],col="darkgreen",lwd=2)
lines(s,OUT[,3],col=4,lwd=2)
lines(s,OUT[,4],col="darkred",lwd=2)
box()
legend(0,.25,col=c(2,"darkgreen",4,"darkred"),lwd=c(2,2,2,2),c("Sensitivity","Specificity","Classification Rate","Distance"))