机器学习系列二【线性回归(最小二乘法、正则化)】

机器学习系列二:深入浅出线性回归(最小二乘法与正则化)

欢迎来到“机器学习系列”的第二篇文章!在上一篇中,我们探讨了机器学习的基本概念与分类。今天,我们将正式踏入算法的殿堂,从最经典、最基础,也是应用最广泛的算法之一开始——线性回归(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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import numpy as np
from sklearn.linear_model import LinearRegression, Ridge, Lasso
from sklearn.datasets import make_regression

# 1. 生成模拟数据:100个样本,10个特征,但只有2个特征是真正有用的(信息特征)
X, y = make_regression(n_samples=100, n_features=10, n_informative=2, noise=5, random_state=42)

# 2. 初始化三种模型
# 为了让正则化效果更明显,我们设置较大的惩罚系数 alpha (在公式中对应 lambda)
ols = LinearRegression()
ridge = Ridge(alpha=10.0)
lasso = Lasso(alpha=5.0)

# 3. 训练模型
ols.fit(X, y)
ridge.fit(X, y)
lasso.fit(X, y)

# 4. 打印并对比特征权重 (参数 theta)
print("【普通线性回归 (OLS)】 权重:")
print(np.round(ols.coef_, 2))

print("\n【岭回归 (Ridge / L2)】 权重:")
print(np.round(ridge.coef_, 2))

print("\n【Lasso 回归 (L1)】 权重 (注意看0的数量):")
print(np.round(lasso.coef_, 2))

运行结果解析:
当你运行这段代码时,你会观察到一个非常有趣的现象:

  • 普通线性回归的权重各有千秋,几乎所有 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)的底层几何逻辑。菱形的尖角就是产生稀疏性的根源。


这就是线性回归的进阶奥秘,希望代码和几何视角的补充能让你对这些算法有更通透的理解!