在机器学习中,线性回归是基础模型之一,但其在面对高维数据或多重共线性时容易出现过拟合问题。为了解决这一问题,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_)
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐