Есть ли какое-либо интуитивное объяснение того, почему логистическая регрессия не будет работать в случае идеального разделения? И почему добавление регуляризации это исправит?

20

У нас много хороших дискуссий по поводу идеального разделения в логистической регрессии. Например, логистическая регрессия в R привела к идеальному разделению (феномен Хаука-Доннера). Что теперь? и модель логистической регрессии не сходится .

Лично я все еще чувствую, что это не интуитивно понятно, почему это будет проблемой и почему добавление регуляризации исправит это. Я сделал несколько анимаций и думаю, что это будет полезно. Поэтому оставьте свой вопрос и ответьте на него самостоятельно, чтобы поделиться с сообществом.

Haitao Du
источник
Смотрите это старое сообщение Брайана Рипли: math.yorku.ca/Who/Faculty/Monette/S-news/0027.html
kjetil b halvorsen

Ответы:

29

Двухмерная демонстрация с игрушечными данными будет использована для объяснения того, что происходило для идеального разделения при логистической регрессии с регуляризацией и без нее. Эксперименты начались с перекрывающегося набора данных, и мы постепенно разделили два класса. Контур и оптимум целевой функции (логистические потери) будут показаны на правой под фигуре. Данные и границы линейного решения изображены на левом вспомогательном рисунке.

Сначала мы попробуем логистическую регрессию без регуляризации.

  • Как мы видим, когда данные расходятся, целевая функция (логистические потери) резко меняется, и оптимизатор отходит к большему значению .
  • Когда мы завершим операцию, контур не будет «замкнутой формы». В это время целевая функция всегда будет меньше, когда решение переместится в верхний правый угол.

введите описание изображения здесь

Далее мы попробуем логистическую регрессию с регуляризацией L2 (L1 аналогично).

  • С той же самой установкой добавление очень маленькой регуляризации L2 изменит целевую функцию, изменяя отношение к разделению данных.

  • В этом случае у нас всегда будет «выпуклая» цель. Независимо от того, насколько разделены данные.

введите описание изображения здесь

код (я также использую тот же код для этого ответа: методы регуляризации для логистической регрессии )

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
источник
2
λ0+λзнак равноε
4
Эти визуализации фантастические.
Мэтью Друри