28 votos

¿Hay alguna explicación intuitiva de por qué la regresión logística no funcionará para el caso de separación perfecta? ¿Y por qué añadir una regularización lo arreglará?

Tenemos muchas y buenas discusiones sobre la separación perfecta en la regresión logística. Como por ejemplo, La regresión logística en R dio como resultado una separación perfecta (fenómeno Hauck-Donner). ¿Y ahora qué? y El modelo de regresión logística no converge .

Personalmente, sigo pensando que no es intuitivo por qué será un problema y por qué añadir la regularización lo arreglará. Hice algunas animaciones y creo que será útil. Así que publicar su pregunta y responder por mí mismo para compartir con la comunidad.

46voto

David Puntos 41

Se utilizará una demostración en 2D con datos de juguete para explicar lo que ocurría para la separación perfecta en la regresión logística con y sin regularización. Los experimentos empezaron con un conjunto de datos superpuestos y separamos gradualmente dos clases. El contorno de la función objetivo y los óptimos (pérdida logística) se mostrarán en la subfigura de la derecha. Los datos y el límite de decisión lineal se representan en la subfigura de la izquierda.

Primero probamos la regresión logística sin regularización.

  • Como podemos ver con los datos que se alejan, la función objetivo (pérdida logística) está cambiando dramáticamente, y el optim se aleja a un valor mayor .
  • Cuando hayamos completado la operación, el contorno no será una "forma cerrada". En este momento, la función objetivo siempre será menor cuando la solución se desplace al extremo superior derecho.

enter image description here

A continuación probamos la regresión logística con regularización L2 (L1 es similar).

  • Con la misma configuración, añadir una regularización L2 muy pequeña cambiará la función objetivo con respecto a la separación de los datos.

  • En este caso, siempre tendremos el objetivo "convexo". No importa la separación que tengan los datos.

enter image description here

código (También utilizo el mismo código para esta respuesta: Métodos de regularización para la regresión logística )

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)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X