岭回归与Lasso回归-ridge&lasso
岭回归与Lasso回归完全解析
一、为什么需要正则化回归?
1. OLS的困境
多元线性回归(OLS)是建模的基础方法,但当数据存在多重共线性或变量过多时,OLS会面临两大问题: - 系数估计不稳定:微小数据变动导致系数剧烈波动 - 过拟合风险:模型在训练集表现好,但泛化能力差
2. 正则化的引入
通过在损失函数中加入惩罚项,限制模型复杂度: - 岭回归(Ridge):L2正则化 - Lasso回归:L1正则化
二、数学原理:从OLS到正则化
1. OLS回归
损失函数:
\[
\min_{\beta} \sum_{i=1}^n (y_i - \beta_0 - \sum_{j=1}^p \beta_j
x_{ij})^2
\]
2. 岭回归(Ridge)
加入L2范数(欧氏范数)惩罚项(λ控制惩罚力度):
\[
\min_{\beta} \left[ \sum_{i=1}^n (y_i - \beta_0 - \sum_{j=1}^p \beta_j
x_{ij})^2 + \lambda \sum_{j=1}^p \beta_j^2 \right]
\]
特点: - 所有系数被等比例压缩,但不会归零 - 解决多重共线性问题,提升模型稳定性 - 是以放弃无偏性、降低精度为代价解决病态矩阵问题的回归方法
3. Lasso回归
加入L1(曼哈顿范数)惩罚项:
\[
\min_{\beta} \left[ \sum_{i=1}^n (y_i - \beta_0 - \sum_{j=1}^p \beta_j
x_{ij})^2 + \lambda \sum_{j=1}^p |\beta_j| \right]
\]
特点: - 可将不重要变量的系数压缩至零,实现变量选择 - 适用于高维数据(变量数>样本数)
三、核心操作:正则化参数λ的选择
1. 交叉验证(K-Fold CV)
- 步骤:将数据分为K份,轮流用K-1份训练,1份验证,计算平均误差
- 目标:选择使验证误差最小的λ值
2. 正则化路径
- 岭回归:系数随λ增大逐渐趋近于零
- Lasso:系数随λ增大会突然变为零
Python示例(可视化路径): 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16from sklearn.linear_model import LassoCV, RidgeCV
import matplotlib.pyplot as plt
# Lasso路径
alphas = np.logspace(-4, 0, 100)
coefs = []
for alpha in alphas:
lasso = Lasso(alpha=alpha)
lasso.fit(X, y)
coefs.append(lasso.coef_)
plt.plot(alphas, coefs)
plt.xscale('log')
plt.xlabel('λ')
plt.ylabel('Coefficients')
plt.title('Lasso Regularization Path')
四、实战案例:棉花产量预测
1. 数据说明
- 自变量:种子费、化肥费、农药费、机械费、灌溉费
- 因变量:棉花单产(1990-2007年数据)
2. 操作流程(Python实现)
(1) 数据标准化
1 |
|
(2) Lasso回归建模
1 |
|
(3) 结果解读
1 |
|
- 结论:机械费、化肥费被剔除,模型保留3个关键变量
五、注意
1. 必须标准化数据
- 原因:正则化对尺度敏感,大范围变量会主导惩罚项
- 方法:使用
StandardScaler
将变量标准化为均值为0,方差为1
2. 如何解释系数?
- 岭回归:系数代表变量对目标的影响方向,但大小受λ影响
- Lasso:非零系数表示重要变量,但绝对值无直接可比性
3. λ的选择陷阱
- 过小:接近OLS,失去正则化效果
- 过大:所有系数被过度压缩,模型欠拟合
六、模型对比与选择
指标 | 岭回归 | Lasso回归 |
---|---|---|
正则化类型 | L2 | L1 |
系数特性 | 连续压缩,不归零 | 稀疏性(部分归零) |
适用场景 | 多重共线性严重 | 高维数据/变量选择 |
计算复杂度 | 解析解(快速) | 需迭代优化(较慢) |
软件实现 | RidgeCV (Python) |
LassoCV (Python) |
七、常见问题解答
Q1:何时用岭回归?何时用Lasso?
- 岭回归:变量均重要,但存在共线性(如经济指标分析)
- Lasso:变量数多,需筛选关键因素(如基因数据建模)
Q2:Elastic Net是什么?
- 混合正则化:L1+L2,平衡变量选择与稳定性
- 公式:
\[\text{损失函数} + \lambda (\alpha \sum |\beta_j| + (1-\alpha) \sum \beta_j^2)\]
Q3:如何解释λ=0的情况?
- λ=0时,模型退化为普通OLS回归