एक लॉजिस्टिक प्रतिगमन मॉडल फिट से अनुमानित मूल्यों (Y = 1 या 0) को प्राप्त करना


50

मान लीजिए कि मेरे पास कक्षा का एक ऑब्जेक्ट है glm(लॉजिस्टिक रिग्रेशन मॉडल के अनुरूप) और मैं बाइनरी प्रतिक्रियाओं में predict.glmतर्क का उपयोग करके दी गई अनुमानित संभावनाओं को चालू करना चाहता हूं type="response", अर्थात या । आर में ऐसा करने का सबसे तेज और सबसे विहित तरीका क्या है?Y=1Y=0

जबकि, मुझे फिर से पता है predict.glm, मुझे नहीं पता कि वास्तव में कटऑफ का मान रहता है - और मुझे लगता है कि यह मेरा मुख्य ठोकर है।पी(Yमैं=1|एक्स^मैं)

जवाबों:


77

एक बार जब आपके पास अनुमानित संभावनाएं होती हैं, तो यह आपके ऊपर है कि आप किस सीमा तक उपयोग करना चाहते हैं। आप संवेदनशीलता, विशिष्टता का अनुकूलन करने के लिए दहलीज चुन सकते हैं या आवेदन के संदर्भ में इसे सबसे महत्वपूर्ण माप सकते हैं (कुछ अतिरिक्त जानकारी अधिक विशिष्ट उत्तर के लिए यहां सहायक होगी)। आप आरओसी घटता और इष्टतम वर्गीकरण से संबंधित अन्य उपायों को देखना चाह सकते हैं।

संपादित करें: इस उत्तर को स्पष्ट करने के लिए मैं कुछ उदाहरण देने जा रहा हूं। वास्तविक उत्तर यह है कि इष्टतम कटऑफ इस बात पर निर्भर करता है कि आवेदन के संदर्भ में क्लासिफायर के कौन से गुण महत्वपूर्ण हैं। बता दें कि अवलोकन , और होने का सही मूल्य है । प्रदर्शन के कुछ सामान्य उपाय हैं मैं वाई मैंYमैंमैंY^मैं

(1) संवेदनशीलता: - '1' के अनुपात को ठीक से पहचाना जाता है।पी(Y^मैं=1|Yमैं=1)

(2) विशिष्टता: - '0' के अनुपात को सही ढंग से पहचाना जाता हैपी(Y^मैं=0|Yमैं=0)

(3) (सही) वर्गीकरण दर: - जो पूर्वानुमान सही थे, उनका अनुपात।पी(Yमैं=Y^मैं)

(1) को True Positive Rate भी कहा जाता है, (2) को True Negative Rate भी कहा जाता है।

उदाहरण के लिए, यदि आपका क्लासिफायर एक गंभीर बीमारी के लिए नैदानिक ​​परीक्षण का मूल्यांकन करने का लक्ष्य था जो अपेक्षाकृत सुरक्षित इलाज है, तो संवेदनशीलता कहीं अधिक महत्वपूर्ण है कि विशिष्टता। एक अन्य मामले में, यदि रोग अपेक्षाकृत मामूली था और उपचार जोखिम भरा था, तो नियंत्रण के लिए विशिष्टता अधिक महत्वपूर्ण होगी। सामान्य वर्गीकरण समस्याओं के लिए, संवेदनशीलता और विनिर्देशन को संयुक्त रूप से अनुकूलित करने के लिए इसे "अच्छा" माना जाता है - उदाहरण के लिए, आप उस वर्गीकरण का उपयोग कर सकते हैं जो बिंदु से उनकी यूक्लिडियन दूरी को कम करता है :(1,1)

δ=[पी(Yमैं=1|Y^मैं=1)-1]2+[पी(Yमैं=0|Y^मैं=0)-1]2

( 1 , 1 )δ को आवेदन के संदर्भ में से दूरी के एक अधिक उचित माप को प्रतिबिंबित करने के लिए दूसरे तरीके से भारित या संशोधित किया जा सकता है - (1,1) से यूक्लिडियन दूरी को मनमाने ढंग से उद्देश्यों के लिए चुना गया था। किसी भी मामले में, इन चार उपायों में से सभी आवेदन के आधार पर सबसे उपयुक्त हो सकते हैं।(1,1)

नीचे एक सिम्युलेटेड उदाहरण है जो एक लॉजिस्टिक रिग्रेशन मॉडल से वर्गीकृत करने के लिए भविष्यवाणी का उपयोग करता है। कटऑफ यह देखने के लिए अलग है कि कटऑफ इन तीन उपायों में से प्रत्येक के तहत "सर्वश्रेष्ठ" क्लासिफायरियर क्या देता है। इस उदाहरण में डेटा एक लॉजिस्टिक रिग्रेशन मॉडल से आता है जिसमें तीन भविष्यवक्ता होते हैं (प्लॉट के नीचे आर कोड देखें)। जैसा कि आप इस उदाहरण से देख सकते हैं, "इष्टतम" कटऑफ इस बात पर निर्भर करता है कि इनमें से कौन सा उपाय सबसे महत्वपूर्ण है - यह पूरी तरह से आवेदन पर निर्भर है।

संपादित करें 2: और , सकारात्मक भविष्य कहनेवाला मूल्य और नकारात्मक भविष्यवाणी मूल्य (ध्यान दें कि ये समान नहीं हैं) संवेदनशीलता और विशिष्टता के रूप में) प्रदर्शन के उपयोगी उपाय भी हो सकते हैं।पी ( Y मैं = 0 | Y मैं = 0 )पी(Yमैं=1|Y^मैं=1)पी(Yमैं=0|Y^मैं=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"))

2
(+1) बहुत अच्छा जवाब। मुझे उदाहरण पसंद है। क्या आपके द्वारा दी गई यूक्लिडियन दूरी के उपयोग को प्रेरित करने के लिए तैयार व्याख्या है? मुझे यह भी लगता है कि इस संदर्भ में यह बताना दिलचस्प हो सकता है कि आरओसी वक्र अनिवार्य रूप से लॉजिस्टिक मॉडल के अवरोधन अनुमान के पोस्ट हॉक संशोधन करके प्राप्त किया गया है।
कार्डिनल

@ कार्डिनल, मुझे पता है कि द्विआधारी वर्गीकरण के लिए थ्रेसहोल्ड अक्सर चुने जाते हैं, जिसके आधार पर आरओसी वक्र के बिंदु (1,1) के करीब है - यूक्लिडियन दूरी मनमाने ढंग से मेरे उदाहरण में "दूरी" की डिफ़ॉल्ट परिभाषा थी
मैक्रो

समझा। मुझे लगा कि अंतर्निहित मॉडल के संदर्भ में इस मात्रा की सहज व्याख्या हो सकती है जो मैं नहीं देख रहा था। (शायद वहाँ है [?])
कार्डिनल

हो सकता है कि ऐसा इसलिए है क्योंकि मैंने पाया है कि संवेदनशीलता और विशिष्टता घटता है, वही जगह है जहां को कम से कम किया जाता है ...δ
मैक्रो

मेरे पास इस समय उपयोग करने के लिए एक टर्मिनल नहीं है , लेकिन मैं सोच रहा हूं कि क्या आप जो प्रभाव देख रहे हैं वह संभवतः इस तथ्य के कारण है कि आपके सिमुलेशन को 0 और 1 प्रतिक्रियाओं के लगभग बराबर संख्या में उत्पन्न करना चाहिए। यदि आप लोगों के अनुपात में भिन्नता रखते हैं, तो क्या संबंध अभी भी बरकरार है? आर
कार्डिनल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.