机器学习:Ridege和Lasso回归
·
在机器学习中,线性回归是基础模型之一,但其在面对高维数据或多重共线性时容易出现过拟合问题。为了解决这一问题,Ridge 回归和Lasso 回归通过引入正则化项(Regularization)对模型进行改进。本文将详细讲解两者的原理,并通过 Python 和 R 语言的代码示例展示其实际应用。
一、Ridge 回归与 Lasso 回归的原理
1. 线性回归的局限性
线性回归的目标是最小化损失函数(均方误差):
[ J(\beta) = \sum_{i=1}^{n} (y_i - X_i \beta)^2 ]
其中:
- yiyi 是目标变量的真实值;
- XiXi 是特征向量;
- ββ 是回归系数。
然而,当特征维度较高或特征之间存在多重共线性时,普通最小二乘法(OLS)的系数估计可能不稳定,导致模型过拟合。
2. Ridge 回归(L2 正则化)
Ridge 回归通过引入 L2 正则化项 来约束系数的大小,目标函数为:
$$ J(\beta) = \sum_{i=1}^{n} (y_i - X_i \beta)^2 + \alpha \sum_{j=1}^{p} \beta_j^2 $$
其中:
- αα 是正则化强度参数(控制惩罚力度);
- βj2βj2 是 L2 正则化项,对系数的平方求和。
特点:
- 所有系数都会被缩小(趋近于零),但不会完全为零;
- 适用于特征相关性高的场景(如多重共线性);
- 不进行特征选择。
3. Lasso 回归(L1 正则化)
Lasso 回归通过引入 L1 正则化项 来实现特征选择,目标函数为:
$$ J(\beta) = \sum_{i=1}^{n} (y_i - X_i \beta)^2 + \lambda \sum_{j=1}^{p} |\beta_j| $$
其中:
- λλ 是正则化强度参数;
- ∣βj∣∣βj∣ 是 L1 正则化项,对系数的绝对值求和。
特点:
- 部分系数会被压缩为零,实现特征选择;
- 适用于高维数据(特征数量远大于样本数);
- 对噪声特征敏感,但能简化模型。
4. Ridge 与 Lasso 的对比
| 特性 | Ridge 回归 | Lasso 回归 |
|---|---|---|
| 正则化项 | L2(平方和) | L1(绝对值和) |
| 系数处理 | 所有系数缩小 | 部分系数压缩为零 |
| 特征选择 | 否 | 是 |
| 多重共线性处理 | 有效 | 无效 |
| 计算复杂度 | 较低 | 较高(需优化算法) |
数据准备:
import numpy as np
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
# 生成模拟数据
X, y = make_regression(n_samples=1000, n_features=20, noise=0.5)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
Ridge回归:
from sklearn.linear_model import Ridge
from sklearn.metrics import mean_squared_error
# 初始化模型(alpha=1.0)
ridge = Ridge(alpha=1.0)
ridge.fit(X_train, y_train)
# 预测与评估
y_pred = ridge.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
print("Ridge 回归 MSE:", mse)
print("系数:", ridge.coef_)
Lasso回归:
from sklearn.linear_model import Ridge
from sklearn.metrics import mean_squared_error
# 初始化模型(alpha=1.0)
ridge = Ridge(alpha=1.0)
ridge.fit(X_train, y_train)
# 预测与评估
y_pred = ridge.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
print("Ridge 回归 MSE:", mse)
print("系数:", ridge.coef_)
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)