Existe-t-il une explication intuitive de la raison pour laquelle la régression logistique ne fonctionnera pas pour un cas de séparation parfait? Et pourquoi l'ajout de la régularisation le corrigera?

20

Nous avons beaucoup de bonnes discussions sur la séparation parfaite dans la régression logistique. Telles que, la régression logistique dans R a conduit à une séparation parfaite (phénomène de Hauck-Donner). Maintenant quoi? et le modèle de régression logistique ne converge pas .

Personnellement, je pense toujours que ce n'est pas intuitif pourquoi ce sera un problème et pourquoi l'ajout de la régularisation le corrigera. J'ai fait quelques animations et je pense que ce sera utile. Postez donc sa question et répondez-la moi-même pour la partager avec la communauté.

Haitao Du
la source
Voir cet ancien article de Brian Ripley: math.yorku.ca/Who/Faculty/Monette/S-news/0027.html
kjetil b halvorsen

Réponses:

29

Une démo 2D avec des données de jouets sera utilisée pour expliquer ce qui se passait pour une séparation parfaite lors de la régression logistique avec et sans régularisation. Les expériences ont commencé avec un ensemble de données qui se chevauchent et nous séparons progressivement deux classes. Le contour et les optima de la fonction objective (perte logistique) seront indiqués dans la sous-figure de droite. Les données et la frontière de décision linéaire sont tracées dans la sous-figure de gauche.

Nous essayons d'abord la régression logistique sans régularisation.

  • Comme nous pouvons le voir avec les données qui s'écartent, la fonction objectif (perte logistique) change radicalement et l' optim s'éloigne vers une valeur plus grande .
  • Une fois l'opération terminée, le contour ne sera plus une "forme fermée". À ce moment, la fonction objectif sera toujours plus petite lorsque la solution se déplace vers l'angle supérieur droit.

entrez la description de l'image ici

Ensuite, nous essayons la régression logistique avec régularisation L2 (L1 est similaire).

  • Avec la même configuration, l'ajout d'une très petite régularisation L2 changera les changements de fonction objectif par rapport à la séparation des données.

  • Dans ce cas, nous aurons toujours l'objectif "convexe". Quelle que soit la séparation des données.

entrez la description de l'image ici

code (j'utilise également le même code pour cette réponse: méthodes de régularisation pour la régression logistique )

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
la source
2
λ0+ solution sans avoir besoin d'approximer λ=ϵ, comme c'est le cas pour certains PDE?
GeoMatt22
4
Ces visualisations sont fantastiques.
Matthew Drury