Tahmin edilen olasılıklara sahip olduğunuzda, hangi eşiği kullanmak istediğiniz size bağlıdır. Duyarlılığı, özgüllüğü veya uygulama bağlamında en önemli ölçüsü ne olursa olsun optimize etmek için eşiği seçebilirsiniz (bazı ek bilgiler burada daha spesifik bir cevap için yardımcı olabilir). ROC eğrilerine ve optimal sınıflandırma ile ilgili diğer önlemlere bakmak isteyebilirsiniz.
Düzenleme: Bu cevabı biraz netleştirmek için bir örnek vereceğim. Asıl cevap, optimum sınırlamanın, sınıflayıcıların hangi özelliklerinin uygulama bağlamında önemli olduğuna bağlı olmasıdır. Let , gözlem için gerçek değer I ve Y, I tahmin sınıfı olabilir. Bazı genel performans ölçütleriYiiY^i
(1) Duyarlılık: - doğru böylece tanımlanan 1 's' oranı.P(Y^i=1|Yi=1)
P(Y^i=0|Yi=0)
P(Yi=Y^i)
(1) Gerçek Olumlu Oran olarak da adlandırılır, (2) Gerçek Olumsuz Oran olarak da adlandırılır.
(1,1)
δ=[P(Yi=1|Y^i=1)−1]2+[P(Yi=0|Y^i=0)−1]2−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−√
δ(1,1)
Aşağıda, sınıflandırmak için bir lojistik regresyon modelinden tahmin kullanarak yapılan benzetilmiş bir örnek verilmiştir. Eşik değeri, bu üç önlemin her birinin altındaki "en iyi" sınıflandırıcıya ne verdiğini görmek için değişir. Bu örnekte, veriler üç kestiricili bir lojistik regresyon modelinden gelmektedir (grafiğin altındaki R koduna bakınız). Bu örnekten görebileceğiniz gibi, "en uygun" sınır bu önlemlerden hangisinin en önemli olduğuna bağlıdır - bu tamamen uygulamaya bağlıdır.
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"))