在学习 glmnet(弹性网、Lasso、Ridge 的核心 R 包)时,课本或论文里最经典的那个“椭圆与几何图形相交”的等高线图,可以说是理解正则化本质的“上帝视角”。
很多人一开始看不懂,是因为把两个不同的东西混淆了:一个是模型的误差等高线(椭圆),另一个是正则化的惩罚边界(圆或菱形)。
想象我们只有两个回归系数 和 。整个图坐标系就是 平面。图上同时存在两类图形:
- 同心椭圆(Loss Function 的等高线):代表模型的预测误差(比如残差平方和 RSS)。
- 几何边界(Penalty 约束区域):代表惩罚项的范围(Ridge 是圆,Lasso 是菱形)。
1. 为什么是“椭圆”(Loss 等高线)?
- 如果不用任何惩罚项(也就是普通的线性回归 OLS),我们的目标是找到让误差最小的点,也就是图中的中心点 (OLS)。
- 离这个中心点越远,误差(Loss)越大。
- 因为两个特征()的量纲或相关性不同,误差展开后在坐标系中呈同心椭圆扩散。椭圆中心误差最小,往外误差递增。
2. 为什么 Ridge 是“圆” ( 范数)?
glmnet中当alpha = 0时即为 Ridge 回归。- 它的惩罚项约束是:(也就是圆的方程 )。
- 在坐标系中,这就画出了一个正圆形的边界。模型的最终解,必须落在这个圆的内部或边界上。
3. 为什么 Lasso 是“菱形” ( 范数)?
- 当
alpha = 1时即为 Lasso 回归。 - 它的惩罚项约束是:。
- 在坐标系中,这个方程画出来的形状不是圆,而是一个带尖角的正方形/菱形(四个顶点分别落在坐标轴上)。
⚡ 决定性的瞬间:相交与“稀疏性”
优化算法的目标是:在满足正则化边界(圆或菱形)的前提下,让误差椭圆尽可能往中心()靠拢。也就是找误差等高线第一次和边界接触(相切)的那一个点。
这就是为什么 Lasso 能实现变量选择(让某些系数直接归零),而 Ridge 不能的关键:
-
Ridge(圆的碰撞):
-
圆是圆滑的、没有尖角的。
-
椭圆扩散出去时,通常会先和圆的光滑弧线相交。在弧线上的点, 和 都不为零。
-
结果:系数被缩小了(Shrinkage),但没有变成绝对的 0。
-
Lasso(菱形的碰撞):
-
菱形有四个突出的尖角(这些尖角正好落在坐标轴上,例如 或 )。
-
椭圆向外扩散时,极容易率先撞上菱形的“尖角”。
-
一旦撞在尖角上,其中一个坐标轴的值就直接变成了 0。
-
结果:实现了特征筛选(Sparse Selection)。
🔗 对应到 glmnet 代码中的直观体现
在 R 的 glmnet 中,你可以通过 alpha 参数自由切换这两种几何形态:
library(glmnet)
# 1. Ridge 回归 (alpha = 0): 对应“圆形”约束,平滑收缩系数
fit_ridge <- glmnet(x, y, alpha = 0)
# 2. Lasso 回归 (alpha = 1): 对应“菱形”约束,产生稀疏解(部分系数归零)
fit_lasso <- glmnet(x, y, alpha = 1)
# 3. 弹性网 (0 < alpha < 1): 约束边界介于圆和菱形之间(像带有圆角的菱形)
fit_enet <- glmnet(x, y, alpha = 0.5)