Une fois que vous avez les probabilités prédites, c'est à vous de choisir le seuil que vous souhaitez utiliser. Vous pouvez choisir le seuil d’optimisation de la sensibilité, de la spécificité ou de la mesure la plus importante dans le contexte de l’application (quelques informations supplémentaires seraient utiles ici pour une réponse plus précise). Vous voudrez peut-être examiner les courbes ROC et d'autres mesures liées à la classification optimale.
Edit: Pour clarifier un peu cette réponse, je vais donner un exemple. La vraie réponse est que la limite optimale dépend des propriétés du classificateur qui sont importantes dans le contexte de l'application. Que soit la vraie valeur pour l' observation i et Y i soit la classe prédite. Certaines mesures courantes de la performance sontYiiY^i
(1) Sensibilité: - la proportion de « 1 'qui sont correctement identifiés comme tels.P(Y^i=1|Yi=1)
P(Y^i=0|Yi=0)
P(Yi=Y^i)
(1) est également appelé Vrai Taux Positif, (2) est également appelé Vrai Taux Négatif.
(1,1)
δ=[P(Yi=1|Y^i=1)−1]2+[P(Yi=0|Y^i=0)−1]2−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−√
δ(1,1)
Vous trouverez ci-dessous un exemple simulé utilisant la prévision d'un modèle de régression logistique à classer. La coupure est variée pour voir quelle coupure donne le "meilleur" classifieur sous chacune de ces trois mesures. Dans cet exemple, les données proviennent d'un modèle de régression logistique à trois prédicteurs (voir graphique R ci-dessous). Comme vous pouvez le constater à partir de cet exemple, le seuil "optimal" dépend de laquelle de ces mesures est la plus importante - elle dépend entièrement de l'application.
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"))