Lojistik bir regresyon modeli uyumundan tahmin edilen değerlerin (Y = 1 veya 0) elde edilmesi


50

Diyelim ki bir sınıf nesnesine sahibim glm(bir lojistik regresyon modeline karşılık gelir) ve predict.glmargümanı kullanarak verilen öngörülen olasılıkları type="response"ikili yanıtlara, yani veya Y = 0'a çevirmek istiyorum . R'de bunu yapmanın en hızlı ve en kanonik yolu nedir?Y=1Y=0

Yine, ben farkındayım ederken predict.glm, ben kesme değeri tam olarak nerede bilmiyorum yaşıyor - ve bu benim Ana engel sanırım.P(Yi=1|X^i)

Yanıtlar:


77

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)

görüntü tanımını buraya girin

# 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"))

2
(+1) Çok güzel cevap. Ben örneği severim. Verdiğiniz Öklid mesafesinin kullanımını motive etmek için bildiğiniz hazır bir yorum var mı? Ayrıca, bu bağlamda ROC eğrisinin temel olarak lojistik modelin kesişme tahmininin tahmin sonrası bir modifikasyonu yapılarak elde edilmesinin ilginç olacağını düşünüyorum.
kardinal,

@Cardinal, ikili sınıflandırma için eşik değerlerin çoğunlukla ROC eğrisindeki hangi noktaya (1,1) en yakın olduğuna göre seçildiğini biliyorum - öklid uzaklığı keyfi olarak örneğimdeki "mesafe" nin varsayılan tanımıydı
Makro

Anlıyorum. Bu miktarın, görmediğim modelin temeli üzerinde sezgisel bir yorumu olabileceğini düşündüm. (Belki de [?]
Var

δ

R
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.