机器学习系列二【线性回归(最小二乘法、正则化)】
机器学习系列二【线性回归(最小二乘法、正则化)】
JayVei机器学习系列二:深入浅出线性回归(最小二乘法与正则化)
欢迎来到“机器学习系列”的第二篇文章!在上一篇中,我们探讨了机器学习的基本概念与分类。今天,我们将正式踏入算法的殿堂,从最经典、最基础,也是应用最广泛的算法之一开始——线性回归(Linear Regression)。
无论是预测房价、分析销售趋势,还是评估风险,线性回归都扮演着举足轻重的角色。本文将带你扒开公式的外衣,深入理解线性回归的核心:最小二乘法,并探讨如何通过正则化技术来让模型变得更稳健。
1. 什么是线性回归?
简单来说,线性回归就是在寻找一条“最佳的直线(或超平面)”,让它能够尽可能地拟合数据点,从而反映出自变量(特征 $x$)和因变量(目标值 $y$)之间的线性关系。
假设我们有 $n$ 个特征,线性回归的预测模型可以表示为:
$$h_\theta(x) = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + … + \theta_n x_n$$
为了书写方便,我们通常引入 $x_0 = 1$,将其转化为向量内积的形式:
$$h_\theta(x) = \theta^T x$$
其中,$\theta$ 是我们需要通过学习得到的参数(权重和偏置),$x$ 是输入的特征向量。
2. 最小二乘法(Ordinary Least Squares, OLS)
模型有了,接下来的核心问题是:我们如何找到那组“最好”的参数 $\theta$? 在机器学习中,我们通常会定义一个代价函数(Cost Function)来衡量模型预测值与真实值之间的误差。线性回归最常用的代价函数是均方误差(MSE)。为了求导方便,我们常常在前面乘上 $\frac{1}{2}$:
$$J(\theta) = \frac{1}{2m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)})^2$$
最小二乘法的核心思想就是:找到一组参数 $\theta$,使得上述代价函数 $J(\theta)$ 的值最小。
如何求解?正规方程(Normal Equation)
由于代价函数是一个凸函数,我们可以直接对 $\theta$ 求偏导,并令其等于 0,从而推导出闭式解(Closed-form solution)。转化为矩阵形式后,可以直接通过以下公式一步求解出最优参数:
$$\theta = (X^T X)^{-1} X^T y$$
💡 思考: 最小二乘法虽然可以直接求解,但它要求矩阵 $X^T X$ 必须是可逆的。如果特征数量大于样本数量,或者特征之间存在高度共线性,这个矩阵将不可逆,模型就会崩溃。这时候,我们就需要引入“正则化”。
3. 模型的梦魇:过拟合(Overfitting)
在实际应用中,如果我们赋予模型太大的自由度(例如特征非常多),它可能会为了“完美”地穿过每一个训练数据点,而变得异常扭曲。这种情况被称为过拟合。
过拟合的模型在训练集上表现极好,但在未知的测试集上却一塌糊涂。为了防止参数 $\theta$ 变得过大、模型变得过分复杂,我们需要对参数进行“惩罚”,这就是正则化(Regularization)。
4. 正则化:给模型加上“紧箍咒”
正则化的本质是在原本的代价函数后面加上一个惩罚项(正则项)。常用的正则化方法有两种:L2 正则化和 L1 正则化。
4.1 岭回归(Ridge Regression)—— L2 正则化
岭回归在原有的 MSE 基础上,加上了所有参数平方和的惩罚项:
$$J(\theta) = \frac{1}{2m} \left[ \sum_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)})^2 + \lambda \sum_{j=1}^{n} \theta_j^2 \right]$$
- **参数 $\lambda$**:控制正则化强度的超参数。$\lambda$ 越大,对参数的惩罚越重,模型越简单;$\lambda$ 越小,模型越接近普通的最小二乘法。
- 特点:L2 正则化会使得参数 $\theta$ 的值变得很小(接近于0),但通常不会完全等于0。它能有效缓解多重共线性问题,并防止过拟合。
4.2 Lasso 回归(Lasso Regression)—— L1 正则化
Lasso 回归则使用了参数绝对值之和作为惩罚项:
$$J(\theta) = \frac{1}{2m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)})^2 + \lambda \sum_{j=1}^{n} |\theta_j|$$
- 特点:L1 正则化有一个非常神奇的特性——它会产生稀疏矩阵。也就是说,它倾向于让一些不重要的特征权重直接变成 0。因此,Lasso 回归除了防过拟合,还自带特征选择的功能!
| 特性对比 | 岭回归 (L2 正则化) | Lasso 回归 (L1 正则化) |
|---|---|---|
| 惩罚项 | 参数的平方和 | 参数的绝对值之和 |
| 参数衰减 | 缩小参数,但不为0 | 缩小参数,可使某些参数为0 |
| 适用场景 | 大多数特征都有用,防止共线性 | 特征极多,需要自动进行特征选择 |
5. 总结
线性回归看似简单,但它包含了机器学习中最核心的思想:模型假设 $\rightarrow$ 定义代价函数 $\rightarrow$ 优化求解。
- 最小二乘法为我们提供了求解线性回归的经典数学工具。
- 正则化(Ridge 和 Lasso)则是我们在面对过拟合和复杂数据时的神兵利器。
掌握了这些,你就已经打下了坚实的机器学习基础。在下一篇文章中,我们将跨出“回归”的领域,看看如何用回归的思想来解决“分类”问题——敬请期待《机器学习系列三:逻辑回归与二分类》!
6. 实战演练:Python (Scikit-Learn) 代码示例
理论懂了,代码怎么写?在 Python 的 Scikit-Learn 库中,实现普通的线性回归、岭回归(Ridge)和 Lasso 回归只需要短短几行代码。
为了直观展示它们对参数(权重)的影响,我们故意生成一组包含无用特征的数据,看看这三种算法会如何处理这些权重。
1 | import numpy as np |
运行结果解析:
当你运行这段代码时,你会观察到一个非常有趣的现象:
- 普通线性回归的权重各有千秋,几乎所有 10 个特征都分配了非零的权重。
- 岭回归(L2)的权重整体被“压扁”了,变得更小,但所有的权重依然存在(不等于 0)。
- Lasso 回归(L1)的权重里出现了大量的
0.0。它精准地剔除了那些无用的噪音特征,只保留了极少数真正有用的特征。这就是我们所说的特征选择和稀疏性。
7. 深度解析:为什么 L1 产生稀疏,L2 只是缩小?(几何视角)
为什么加上绝对值(L1)就会让参数变成 0,而加上平方和(L2)只会让参数变小?这就需要我们戴上“几何”的眼镜来看待这个问题。
为了方便画图和想象,我们假设模型只有两个参数 $\theta_1$ 和 $\theta_2$。
我们可以把带有正则化项的代价函数优化问题,等价转化为带约束条件的优化问题:我们要寻找一组参数,使得原始的代价函数 $J_0(\theta)$(也就是残差平方和)最小,但前提是参数必须满足正则化的限制范围。
7.1 L2 正则化的几何空间:光滑的圆形
L2 正则化的限制条件是 $\theta_1^2 + \theta_2^2 \le C$($C$ 是一个常数)。
在二维平面上,这是一个以原点为中心的圆形区域。
与此同时,我们原始代价函数 $J_0(\theta)$ 的等高线是一圈一圈的椭圆。椭圆的中心是不加任何限制时的最优解。
我们的目标是:让这个椭圆不断向外膨胀,直到它第一次接触到 L2 的圆形限制区域。
- 接触点就是 L2 正则化下的最优参数解。
- 因为圆形是非常光滑的,椭圆与圆的接触点极大概率会落在圆弧上的某一点,而极小概率会正好落在坐标轴上。因此,$\theta_1$ 和 $\theta_2$ 的值会被缩小,但都不为 0。
7.2 L1 正则化的几何空间:带尖角的菱形
L1 正则化的限制条件是 $|\theta_1| + |\theta_2| \le C$。
在二维平面上,它画出来是一个以原点为中心的正菱形(钻石形)。它的四个顶点刚好落在坐标轴上。
同样的,等高线椭圆不断膨胀,去寻找与菱形的第一个接触点。
- 奇妙的事情发生了:因为菱形有突出的“尖角”,且这些尖角全部在坐标轴上,所以不断膨胀的椭圆非常容易在这些“尖角”处与菱形发生首次接触!
- 当接触点在坐标轴上(例如 $\theta_1$ 轴)时,意味着对应的 $\theta_2$ 的值正好等于 0。
这就是 L1 正则化容易产生稀疏解(把某些特征权重直接变成 0)的底层几何逻辑。菱形的尖角就是产生稀疏性的根源。
这就是线性回归的进阶奥秘,希望代码和几何视角的补充能让你对这些算法有更通透的理解!




