Apakah ada penjelasan intuitif mengapa regresi logistik tidak akan berfungsi untuk kasus pemisahan sempurna? Dan mengapa menambahkan regularisasi akan memperbaikinya?

20

Kami memiliki banyak diskusi bagus tentang pemisahan sempurna dalam regresi logistik. Seperti, Regresi logistik dalam R menghasilkan pemisahan sempurna (fenomena Hauck-Donner). Sekarang apa? dan model regresi logistik tidak bertemu .

Saya pribadi masih merasa itu tidak intuitif mengapa itu akan menjadi masalah dan mengapa menambahkan regularisasi akan memperbaikinya. Saya membuat beberapa animasi dan berpikir itu akan sangat membantu. Jadi posting pertanyaannya dan jawab sendiri untuk berbagi dengan komunitas.

Haitao Du
sumber
Lihat posting lama ini oleh Brian Ripley: math.yorku.ca/Who/Faculty/Monette/S-news/0027.html
kjetil b halvorsen

Jawaban:

29

Demo 2D dengan data mainan akan digunakan untuk menjelaskan apa yang terjadi untuk pemisahan sempurna pada regresi logistik dengan dan tanpa regularisasi. Percobaan dimulai dengan kumpulan data yang tumpang tindih dan kami secara bertahap memisahkan dua kelas. Kontur fungsi objektif dan optima (kerugian logistik) akan ditampilkan pada sub gambar kanan. Data dan batas keputusan linier diplot dalam sub gambar kiri.

Pertama kami mencoba regresi logistik tanpa regularisasi.

  • Seperti yang dapat kita lihat dengan data yang bergerak terpisah, fungsi objektif (kehilangan logistik) berubah secara dramatis, dan optimasinya bergerak menjauh ke nilai yang lebih besar .
  • Ketika kami telah menyelesaikan operasi, kontur tidak akan menjadi "bentuk tertutup". Pada saat ini, fungsi objektif akan selalu lebih kecil ketika solusi bergerak ke sudut kanan atas.

masukkan deskripsi gambar di sini

Selanjutnya kita mencoba regresi logistik dengan regularisasi L2 (L1 serupa).

  • Dengan pengaturan yang sama, menambahkan regularisasi L2 yang sangat kecil akan mengubah perubahan fungsi tujuan sehubungan dengan pemisahan data.

  • Dalam hal ini, kita akan selalu memiliki tujuan "cembung". Tidak peduli berapa banyak pemisahan yang dimiliki data.

masukkan deskripsi gambar di sini

kode (saya juga menggunakan kode yang sama untuk jawaban ini: Metode pengaturan untuk regresi logistik )

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)
Haitao Du
sumber
2
λ0+λ=ϵ
4
Visualisasi ini fantastis.
Matthew Drury