क्या इस बात का कोई सहज स्पष्टीकरण है कि लॉजिस्टिक प्रतिगमन सही पृथक्करण मामले के लिए काम क्यों नहीं करेगा? और नियमितिकरण को जोड़ने से इसे ठीक क्यों किया जाएगा?


20

लॉजिस्टिक रिग्रेशन में परफेक्ट अलगाव के बारे में हमारी कई अच्छी चर्चाएँ हैं। जैसे, R में लॉजिस्टिक रिग्रेशन सही अलगाव (हक-डोनर घटना) के रूप में हुआ। अब क्या? और लॉजिस्टिक रिग्रेशन मॉडल अभिसरण नहीं करता है

मैं व्यक्तिगत रूप से अभी भी महसूस करता हूं कि यह सहज नहीं है कि यह समस्या क्यों होगी और नियमितीकरण को जोड़ने से यह ठीक हो जाएगा। मैंने कुछ एनिमेशन बनाए और सोचा कि यह मददगार होगा। इसलिए उसका प्रश्न पोस्ट करें और समुदाय द्वारा साझा करने के लिए स्वयं द्वारा इसका उत्तर दें।


ब्रायन रिप्ले की इस पुरानी पोस्ट को देखें: math.yorku.ca/Who/Facademy/Monette/S-news/0027.html
kjetil b halvorsen

जवाबों:


29

टॉयलेट डेटा के साथ 2 डी डेमो का उपयोग यह समझाने के लिए किया जाएगा कि नियमितीकरण के साथ और बिना लॉजिस्टिक प्रतिगमन पर सही पृथक्करण के लिए क्या हो रहा था। प्रयोग एक अतिव्यापी डेटा सेट के साथ शुरू हुए और हम धीरे-धीरे दो वर्गों को अलग कर रहे हैं। उद्देश्य फ़ंक्शन समोच्च और ऑप्टिमा (लॉजिस्टिक लॉस) को सही उप आकृति में दिखाया जाएगा। डेटा और रैखिक निर्णय सीमा बाएं उप आकृति में प्लॉट की जाती है।

पहले हम नियमितीकरण के बिना लॉजिस्टिक रिग्रेशन का प्रयास करते हैं।

  • जैसा कि हम डेटा को अलग-अलग चलते हुए देख सकते हैं, उद्देश्य फ़ंक्शन (लॉजिस्टिक लॉस) नाटकीय रूप से बदल रहा है, और आशावादी एक बड़े मूल्य के लिए दूर जा रहा है
  • जब हमने ऑपरेशन पूरा कर लिया है, तो समोच्च एक "बंद आकार" नहीं होगा। इस समय, उद्देश्य फ़ंक्शन हमेशा छोटा होगा जब समाधान ऊपरी दाहिने हिस्से में जाता है।

यहां छवि विवरण दर्ज करें

अगला हम L2 नियमितीकरण के साथ लॉजिस्टिक रिग्रेशन का प्रयास करते हैं (L1 समान है)।

  • एक ही सेटअप के साथ, एक बहुत छोटे L2 नियमितकरण को जोड़ने से डेटा के पृथक्करण के उद्देश्य फ़ंक्शन में परिवर्तन होगा।

  • इस मामले में, हम हमेशा "उत्तल" उद्देश्य रखेंगे। कोई फर्क नहीं पड़ता कि डेटा को कितना अलग करना है।

यहां छवि विवरण दर्ज करें

कोड (मैं भी इस जवाब के लिए एक ही कोड का उपयोग करता हूं: लॉजिस्टिक प्रतिगमन के लिए नियमितीकरण के तरीके )

set.seed(0)  
d=mlbench::mlbench.2dnormals(100, 2, r=1)

x = d$x
y = ifelse(d$classes==1, 1, 0)

logistic_loss <- function(w){
  p    = plogis(x %*% w)
  L    = -y*log(p) - (1-y)*log(1-p)
  LwR2 = sum(L) + lambda*t(w) %*% w
  return(c(LwR2))
}

logistic_loss_gr <- function(w){
  p = plogis(x %*% w)
  v = t(x) %*% (p - y)
  return(c(v) + 2*lambda*w)
}

w_grid_v = seq(-10, 10, 0.1)
w_grid   = expand.grid(w_grid_v, w_grid_v)

lambda = 0
opt1   = optimx::optimx(c(1,1), fn=logistic_loss, gr=logistic_loss_gr, method="BFGS")
z1     = matrix(apply(w_grid,1,logistic_loss), ncol=length(w_grid_v))

lambda = 5
opt2   = optimx::optimx(c(1,1), fn=logistic_loss, method="BFGS")
z2     = matrix(apply(w_grid,1,logistic_loss), ncol=length(w_grid_v))

plot(d, xlim=c(-3,3), ylim=c(-3,3))
abline(0, -opt1$p2/opt1$p1, col='blue',  lwd=2)
abline(0, -opt2$p2/opt2$p1, col='black', lwd=2)
contour(w_grid_v, w_grid_v, z1, col='blue',  lwd=2, nlevels=8)
contour(w_grid_v, w_grid_v, z2, col='black', lwd=2, nlevels=8, add=T)
points(opt1$p1, opt1$p2, col='blue',  pch=19)
points(opt2$p1, opt2$p2, col='black', pch=19)

2
λ0+λ=ε

4
ये दृश्य शानदार हैं।
मैथ्यू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.