Після того, як у вас є прогнозовані ймовірності, саме від вас залежить, який поріг ви хочете використовувати. Ви можете вибрати поріг, щоб оптимізувати чутливість, специфіку чи будь-який мір, який є найважливішим у контексті програми (дещо додаткова інформація буде корисна тут для більш конкретної відповіді). Ви можете переглянути криві ROC та інші заходи, пов'язані з оптимальною класифікацією.
Редагувати: Щоб дещо уточнити цю відповідь, я надам приклад. Справжня відповідь полягає в тому, що оптимальне відсічення залежить від того, які властивості класифікатора важливі в контексті програми. Нехай - справжнє значення для спостереження , а - передбачуваний клас. Деякі загальні заходи ефективності єYiiY^i
(1) Чутливість: - частка '1, які правильно ідентифіковані як так.P(Y^i=1|Yi=1)
(2) Специфіка: - частка '0, які правильно ідентифіковані як такP(Y^i=0|Yi=0)
(3) (Правильний) Коефіцієнт класифікації: - частка правильних прогнозів.P(Yi=Y^i)
(1) також називається істинною позитивною швидкістю, (2) також називається істинною негативною швидкістю.
Наприклад, якщо ваш класифікатор мав на меті оцінити діагностичний тест на серйозне захворювання, яке має відносно безпечне лікування, чутливість набагато важливіша, ніж специфічність. В іншому випадку, якщо хвороба була відносно незначною, а лікування було ризикованим, важливіше було б контролювати специфіку. Для загальних проблем із класифікацією вважається "добре" спільно оптимізувати чутливість та специфікацію - наприклад, ви можете використовувати класифікатор, що мінімізує їх евклідову відстань від точки :(1,1)
δ=[P(Yi=1|Y^i=1)−1]2+[P(Yi=0|Y^i=0)−1]2−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−√
δ може бути зважена або модифікована іншим способом, щоб відобразити більш розумну міру відстані від в контексті програми - евклідова відстань від (1,1) тут була обрана довільно для ілюстративних цілей. У будь-якому випадку всі ці чотири заходи можуть бути найбільш підходящими, залежно від заявки.(1,1)
Нижче наводиться модельований приклад з використанням прогнозування з логістичної регресійної моделі для класифікації. Обрізання залежить від того, який зріз дає "найкращий" класифікатор за кожним із цих трьох заходів. У цьому прикладі дані походять з логістичної регресійної моделі з трьома предикторами (див. Код R нижче графіку). Як видно з цього прикладу, "оптимальне" відсічення залежить від того, який із цих заходів є найважливішим - це повністю залежить від застосування.
Редагуйте 2: та , додатне прогнозне значення та від'ємне передбачувальне значення (зверніть увагу, що вони НЕ однакові як чутливість та специфічність) також можуть бути корисними заходами ефективності.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"))