Czy jest jakieś intuicyjne wyjaśnienie, dlaczego regresja logistyczna nie zadziała w przypadku idealnej separacji? A dlaczego dodanie uregulowania to naprawi?

20

Prowadzimy wiele dobrych dyskusji na temat idealnej separacji w regresji logistycznej. Takich jak regresja logistyczna w R doprowadziła do idealnej separacji (zjawisko Haucka-Donnera). Co teraz? a model regresji logistycznej nie jest zbieżny .

Osobiście nadal uważam, że nie jest intuicyjne, dlaczego będzie to problem i dlaczego dodanie regularyzacji to rozwiąże. Zrobiłem kilka animacji i myślę, że będzie to pomocne. Zadaj więc swoje pytanie i sam odpowiedz na nie, aby podzielić się ze społecznością.

Haitao Du
źródło
Zobacz stary post Briana Ripleya: math.yorku.ca/Who/Faculty/Monette/S-news/0027.html
kjetil b halvorsen

Odpowiedzi:

29

Demonstracja 2D z danymi zabawek zostanie wykorzystana do wyjaśnienia, co działo się w celu idealnej separacji regresji logistycznej z i bez regularyzacji. Eksperymenty rozpoczęły się od nakładającego się zestawu danych i stopniowo dzielimy dwie klasy. Kontur funkcji celu i optymima (utrata logistyczna) zostaną pokazane na prawej części rysunku. Dane i liniową granicę decyzyjną przedstawiono na lewej rycinie.

Najpierw próbujemy regresji logistycznej bez regularyzacji.

  • Jak widzimy, gdy dane się rozchodzą, funkcja celu (utrata logistyki) zmienia się dramatycznie, a optym odchodzi do większej wartości .
  • Po zakończeniu operacji kontur nie będzie miał „kształtu zamkniętego”. W tym momencie funkcja celu będzie zawsze mniejsza, gdy rozwiązanie znajdzie się w prawym górnym rogu.

wprowadź opis zdjęcia tutaj

Następnie próbujemy regresji logistycznej z regularyzacją L2 (L1 jest podobny).

  • Przy tej samej konfiguracji dodanie bardzo małej regularyzacji L2 zmieni zmiany funkcji celu względem rozdzielenia danych.

  • W takim przypadku zawsze będziemy mieć cel „wypukły”. Bez względu na stopień separacji danych.

wprowadź opis zdjęcia tutaj

kod (używam tego samego kodu do tej odpowiedzi: metody regularyzacji dla regresji logistycznej )

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
źródło
2
λ0+λ=ϵ
4
Te wizualizacje są fantastyczne.
Matthew Drury