是否有逻辑上的解释说明为什么逻辑回归不适用于完美分离的情况?以及为什么添加正则化将解决此问题?


20

关于逻辑回归中的完美分离,我们有很多很好的讨论。例如,R中的逻辑回归导致完美的分离(Hauck-Donner现象)。怎么办?Logistic回归模型不收敛

我个人仍然觉得这为什么会是一个问题以及为什么添加正则化可以解决这个问题并不直观。我制作了一些动画,并认为这会有所帮助。因此,请亲自发布他的问题并回答,以便与社区分享。


Answers:


29

带有玩具数据的2D演示将用于说明在进行正则化和不进行正则化的情况下,逻辑回归完美分离所发生的情况。实验从重叠的数据集开始,然后我们逐渐将两类分开。目标函数轮廓和最佳值(物流损失)将显示在右下图中。数据和线性决策边界绘制在左侧子图中。

首先,我们尝试不进行正则化的逻辑回归。

  • 正如我们看到的,随着数据的分散,目标函数(物流损失)发生了巨大的变化,而乐观情绪逐渐向更大的值倾斜
  • 完成操作后,轮廓将不再是“闭合形状”。此时,当解决方案移至右上角时,目标函数将始终较小。

在此处输入图片说明

接下来,我们尝试使用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)

2
λ0+λ=ϵ

4
这些可视化效果很棒。
马修·德鲁里
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.