1. 简介
线性回归是机器学习中最基础且应用最广泛的算法之一。本文将从回归的基本概念入手,深入讲解线性回归模型,并重点讨论为何需要引入正则化。我们会结合数学公式进行讲解,并解释其背后的含义。
正则化在防止模型过拟合方面起着关键作用,尤其在特征维度较高时更为重要。我们将介绍三种主要的正则化方法:Lasso、Ridge 和 Elastic Net。
2. 回归概述
回归是一种统计建模方法,用于研究输入变量(特征)与输出变量(目标)之间的关系。其核心思想是通过建立变量之间的函数关系,实现预测或趋势分析。
2.1 回归类型
- 简单回归:仅使用一个输入变量
- 多元回归:使用两个或更多输入变量
- 单变量回归:输出变量只有一个
- 多变量回归:输出变量有两个或以上
常见的三种回归模型:
- ✅ 线性回归:假设变量之间存在线性关系
- ✅ 多项式回归:使用多项式拟合非线性关系
- ✅ 逻辑回归:用于二分类问题的概率建模(虽然名字带“回归”,但本质是分类)
3. 线性回归
线性回归的目标是找到一个线性函数,使得预测值 $\hat{y}$ 尽可能接近真实值 $y$。
3.1 数学表达式
基本形式:
$$ \hat{y} = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \cdots + \theta_n x_n $$
向量化表示:
$$ \hat{y} = \boldsymbol{\theta}^T \cdot \boldsymbol{x} $$
其中:
- $\boldsymbol{\theta} = (\theta_0, \theta_1, ..., \theta_n)$ 是模型参数
- $\boldsymbol{x} = (1, x_1, ..., x_n)$ 是特征向量($x_0 = 1$ 是偏置项)
3.2 损失函数
我们通常使用均方误差(MSE)作为损失函数:
$$ \text{MSE} = \frac{1}{m} \sum_{i=1}^{m} (\boldsymbol{\theta}^T \cdot \boldsymbol{x}^{(i)} - y^{(i)})^2 $$
3.3 求解方法
✅ 闭式解(Normal Equation)
$$ \hat{\boldsymbol{\theta}} = (\boldsymbol{X}^T \cdot \boldsymbol{X})^{-1} \cdot \boldsymbol{X}^T \cdot \boldsymbol{y} $$
优点:一步到位
缺点:计算 $(\boldsymbol{X}^T \cdot \boldsymbol{X})^{-1}$ 时间复杂度为 $O(n^3)$,不适合高维特征
✅ 梯度下降(Gradient Descent)
迭代优化方法,更新公式为:
$$ \theta := \theta - \alpha \cdot \frac{\partial J(\theta)}{\partial \theta} $$
优点:适用于大规模数据
缺点:收敛速度慢,依赖学习率 $\alpha$
✅ SVD + Moore-Penrose 伪逆
通过奇异值分解(SVD)求解伪逆:
$$ \boldsymbol{\theta} = \boldsymbol{V} \Sigma^{\dagger} \boldsymbol{U}^T \boldsymbol{y} $$
✅ Scikit-learn 默认使用此方法,速度快且数值稳定
4. 正则化方法
正则化用于防止模型过拟合,通过在损失函数中加入惩罚项,使模型更简洁。
4.1 Lasso 回归(L1 正则化)
$$ J(\theta) = \frac{1}{m} \sum_{i=1}^{m} (\boldsymbol{\theta}^T \cdot \boldsymbol{x}^{(i)} - y^{(i)})^2 + \lambda \sum_{j=1}^{n} |\theta_j| $$
特点:
- ✅ 可用于特征选择(部分权重变为 0)
- ⚠️ $\lambda$ 越大,权重越接近 0
4.2 Ridge 回归(L2 正则化)
$$ J(\theta) = \frac{1}{m} \sum_{i=1}^{m} (\boldsymbol{\theta}^T \cdot \boldsymbol{x}^{(i)} - y^{(i)})^2 + \lambda \sum_{j=1}^{n} \theta_j^2 $$
特点:
- ✅ 防止过拟合效果稳定
- ✅ 收敛速度比 Lasso 快
4.3 Elastic Net(L1 + L2 正则化)
$$ J(\theta) = \frac{1}{m} \sum_{i=1}^{m} (\boldsymbol{\theta}^T \cdot \boldsymbol{x}^{(i)} - y^{(i)})^2 + \lambda_1 \sum_{j=1}^{n} |\theta_j| + \lambda_2 \sum_{j=1}^{n} \theta_j^2 $$
特点:
- ✅ 结合 Lasso 和 Ridge 的优点
- ⚠️ 需要同时调整两个参数 $\lambda_1$ 和 $\lambda_2$
5. 正则化参数选择
正则化参数 $\lambda$ 决定了模型的复杂度与泛化能力。常用方法包括:
- 交叉验证(Cross-Validation):将数据分为多个子集,轮流作为验证集评估模型
- 网格搜索(Grid Search):尝试多个 $\lambda$ 值,选择验证误差最小的
- 随机搜索(Random Search):在给定范围内随机选择 $\lambda$ 值
- 自动调参(如 Scikit-learn 的 RidgeCV、LassoCV):封装好的方法,直接使用即可
✅ 建议从 $\lambda = 0$ 开始逐步增加,观察验证误差变化,找到最佳平衡点
6. 总结
本文系统介绍了线性回归的基本原理、三种主流求解方法以及三种正则化技术。正则化是防止过拟合的重要手段,L1、L2 和 Elastic Net 各有优劣,需根据具体任务选择。掌握这些内容,有助于在实际项目中更好地构建和调优线性模型。
✅ 重点回顾:
- 线性回归本质是拟合特征与目标之间的线性关系
- 求解方法中,SVD + 伪逆是 Scikit-learn 默认选择
- 正则化是防止过拟合的关键,L1 适合特征选择,L2 收敛更快,Elastic Net 综合两者优点
- 参数 $\lambda$ 通过交叉验证等方式选择,找到最优平衡点