Mükemmel regresyon davası için lojistik regresyonun neden işe yaramayacağına dair sezgisel bir açıklama var mı? Düzenleme eklemek neden bunu düzeltir?


20

Lojistik regresyonda mükemmel ayrılma hakkında birçok iyi tartışmamız var. Bu şekilde, R lojistik regresyon mükemmel ayırma (Hauck-Donner fenomeni) ile sonuçlanmıştır. Şimdi ne olacak? ve lojistik regresyon modeli yakınsama yapmaz .

Şahsen hala neden bir sorun olacağı ve düzenlileştirme eklemenin sorunu çözeceği için sezgisel olmadığını hissediyorum. Bazı animasyonlar yaptım ve faydalı olacağını düşünüyorum. Bu yüzden sorusunu gönderin ve toplulukla paylaşmak için kendim cevaplayın.


Brian Ripley tarafından yazılmış bu eski gönderiye
kjetil b halvorsen

Yanıtlar:


29

Düzenleme ile ve regülasyon olmadan lojistik regresyonda mükemmel bir ayrılma için neler olduğunu açıklamak için oyuncak verileri içeren bir 2D demo kullanılacaktır. Deneyler örtüşen bir veri seti ile başladı ve yavaş yavaş iki sınıfı birbirinden ayırıyoruz. Objektif fonksiyon konturu ve optima (lojistik kayıp) sağ alt şekilde gösterilecektir. Veriler ve doğrusal karar sınırı sol alt şekilde çizilmiştir.

Önce lojistik regresyonu düzenli olmadan deniyoruz.

  • Verilerin birbirinden uzaklaştıkça görebildiğimiz gibi, objektif fonksiyon (lojistik kayıp) önemli ölçüde değişiyor ve optim daha büyük bir değere doğru kayıyor .
  • İşlemi tamamladığımızda, kontur "kapalı bir şekil" olmayacaktır. Şu anda, çözüm sağ üst köşeye hareket ettiğinde objektif fonksiyon her zaman daha küçük olacaktır.

resim açıklamasını buraya girin

Daha sonra L2 düzenlenmesi ile lojistik regresyonu deneriz (L1 benzerdir).

  • Aynı kurulumla, çok küçük bir L2 düzeninin eklenmesi, verilerin ayrılmasına göre objektif işlev değişikliklerini değiştirecektir.

  • Bu durumda, her zaman "dışbükey" hedefimiz olacaktır. Verilerin ayrımı ne olursa olsun.

resim açıklamasını buraya girin

kodu (Ben de bu cevap için aynı kodu kullanın: Lojistik regresyon için düzenlileştirme yöntemleri )

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
Bu görselleştirmeler harika.
Matthew Drury
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.