Logistic

是否有任何直觀的解釋為什麼邏輯回歸不適用於完美的分離情況?為什麼添加正則化會解決它?

  • October 13, 2016

我們對邏輯回歸中的完美分離進行了很多很好的討論。例如,R 中的邏輯回歸導致完美分離(Hauck-Donner 現象)。怎麼辦?Logistic 回歸模型不收斂

我個人仍然覺得為什麼它會成為一個問題以及為什麼添加正則化會解決它並不直觀。我製作了一些動畫,並認為它會有所幫助。所以發布他的問題並自己回答以與社區分享。

將使用帶有玩具數據的 2D 演示來解釋使用和不使用正則化的邏輯回歸的完美分離發生了什麼。實驗從重疊的數據集開始,我們逐漸將兩個類分開。目標函數輪廓和最優值(邏輯損失)將顯示在右側子圖中。數據和線性決策邊界繪製在左子圖中。

首先,我們嘗試不進行正則化的邏輯回歸。

  • 正如我們所看到的,隨著數據的分離,目標函數(邏輯損失)正在發生巨大變化,而優化值正在向更大的值移動
  • 當我們完成操作後,輪廓就不會是“閉合形狀”了。此時,當解移動到右上角時,目標函數總是會變小。

在此處輸入圖像描述

接下來我們嘗試使用 L2 正則化的邏輯回歸(L1 類似)。

  • 在相同的設置下,添加一個非常小的 L2 正則化將改變關於數據分離的目標函數。
  • 在這種情況下,我們總是有“凸”的目標。無論數據有多少分離。

在此處輸入圖像描述

代碼(我也使用相同的代碼來回答這個問題:Regularization methods for Logistic regression

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)

引用自:https://stats.stackexchange.com/questions/239928

comments powered by Disqus