,

1. 线性回归简介 (Introduction)

1.1 问题定义

线性回归是机器学习中最基础也是最重要的算法之一,它不仅自身是一个强大的预测工具,也是许多复杂模型(如神经网络)的基石。其核心目标是学习一个线性模型,通过输入特征的线性组合来尽可能准确地预测实数值输出标记。

给定数据集:

$$
D = {(x_{1}, y_{1}), (x_{2}, y_{2}), …, (x_{m}, y_{m})}
$$

其中:

  • $x_{i} = (x_{i1}; x_{i2}; …; x_{id})$ 是第 $i$ 个样本的 $d$ 维特征向量。例如,在房价预测中,$x_{i}$ 可能包含房屋面积、卧室数量、房龄等 $d$ 个属性。
  • $y_{i} \in \mathbb{R}$ 是对应的真实值标签(Real-valued output),也就是我们希望模型预测的目标值(如房屋的成交价格)。

1.2 数据预处理:离散变量的处理

在实际应用场景中,原始数据往往不全是连续的数值,还经常包含离散变量(Categorical features)。正确处理这些变量对于模型的性能至关重要,处理方式主要取决于这些值之间是否存在内在的序关系

  1. 存在序关系 (Ordinal relationship exists)

    • 示例:学历(高中 < 本科 < 硕士)、评价等级(低 < 中 < 高)。
    • 处理方法:因为这些值之间存在自然的大小顺序,我们可以直接将其转换为数值变量。例如,将“高中”映射为 1,“本科”映射为 2,“硕士”映射为 3。模型能够理解 3 > 2 > 1 的数学含义。
  2. 不存在序关系 (No ordinal relationship exists)

    • 示例:颜色(红、绿、蓝)、城市(北京、上海、广州)。
    • 处理方法:如果我们强行将“红”设为 1,“绿”设为 2,“蓝”设为 3,模型会错误地认为“蓝”比“红”大,或者“绿”是“红”和“蓝”的平均值,这在逻辑上是荒谬的。
    • 因此,必须使用 独热编码 (One-hot encoding)。将具有 $k$ 个可能值的离散变量转换为一个 $k$ 维的稀疏向量。例如,红色变为 $[1, 0, 0]$,绿色变为 $[0, 1, 0]$。

2. 线性模型 (The Model)

2.1 基本形式

线性回归试图学得一个线性函数 $f(x)$ 来拟合数据:

$$
f(x) = wx + b
$$

使得预测值 $f(x_{i})$ 尽可能接近真实值 $y_{i}$,即 $f(x_{i}) \simeq y_{i}$。

在这个公式中:

  • $w$ (权重):代表了每个特征的重要性。如果某个特征 $x_j$ 的权重 $w_j$ 很大,说明该特征对结果影响显著;如果 $w_j$ 为正,说明正相关;为负则说明负相关。
  • $b$ (偏置):代表了当所有特征都为 0 时的基础预测值,类似于直线在 y 轴上的截距。

2.2 误差项 (Error Term)

现实世界中的数据很少完美地落在一条直线上。真实的回归函数通常包含一个无法被线性模型解释的部分,我们假设真实关系为:

$$
y = wx + b + \epsilon
$$

其中 $\epsilon$ 是误差项。它可能来源于:

  • 测量误差:数据采集过程中的噪音。
  • 未建模的因素:影响 $y$ 但未被包含在特征 $x$ 中的变量。
  • 随机干扰:系统内在的随机性。

3. 目标函数 (Objective Function)

为了找到最佳的参数 $w$ 和 $b$,我们需要定义一个衡量标准来评估模型的好坏,这就是损失函数 (Loss Function)

3.1 均方误差 (Mean Squared Error, MSE)

线性回归最常用的性能度量是均方误差。我们的直观目标是让模型预测的点与真实数据点之间的距离越小越好。

定义损失函数 $J(\theta)$ 或 $E_{(w,b)}$:

$$
E_{(w,b)} = \sum_{i=1}^{m}(y_{i} - wx_{i} - b)^{2}
$$

为什么使用平方?

  1. 惩罚大误差:平方操作会放大较大的误差。如果预测值偏离真实值很远,损失函数的值会急剧增加,迫使模型更关注那些预测得很差的样本。
  2. 数学便利性:平方函数是光滑且处处可导的凸函数,这使得求导和寻找极值点变得非常容易。

3.2 优化目标

我们的任务是求解以下优化问题,找到让总误差最小的那组参数:

$$
(w^{}, b^{}) = \sum_{i=1}^{m}(y_{i} - wx_{i} - b)^{2}
$$

4. 求解方法 (Learning Algorithms)

求解参数 $\theta$ (即 $w$ 和 $b$) 主要有三种经典方法,分别适用于不同的数据规模和场景:

方法一:闭式解 (Closed Form / Least Squares)

最小二乘法 (Least Squares Method) 试图直接通过数学推导,一步到位地找到令均方误差最小的参数解析解。

1. 简单线性回归 (单变量)

通过微积分求极值的方法,我们将损失函数对 $w$ 和 $b$ 分别求偏导,并令导数为 0(驻点):

  • $\frac{\partial E}{\partial w} = 2(w\sum x_{i}^{2} - \sum(y_{i}-b)x_{i}) = 0$
  • $\frac{\partial E}{\partial b} = 2(mb - \sum(y_{i}-wx_{i})) = 0$

解得闭式解公式:

$$
w = \frac{\sum_{i=1}^{m} y_{i}(x_{i} - \bar{x})}{\sum_{i=1}^{m} x_{i}^{2} - \frac{1}{m}(\sum_{i=1}^{m} x_{i})^{2}}
$$

$$
b = \frac{1}{m} \sum_{i=1}^{m} (y_{i} - wx_{i})
$$

(其中 $\bar{x} = \frac{1}{m}\sum x_{i}$ 为 $x$ 的均值。可以看出,$b$ 本质上是用中心化后的数据来调整截距。)

2. 多元线性回归 (Multivariate)

当特征为多维向量时,标量运算变得繁琐,我们使用更简洁的矩阵表示法。
令 $X$ 为 $m \times (d+1)$ 的矩阵(每行一个样本,最后添加一列全为 1 用于吸收偏置项 $b$),$y$ 为标签向量。

$$
f(x) = w^T x
$$
(注:此处向量 $w$ 维度变为 $d+1$,包含了权重和偏置)

损失函数矩阵形式:

$$
E_{\hat{w}} = (y - X\hat{w})^{T}(y - X\hat{w})
$$

求导并令为 0:

$$
\frac{\partial E_{\hat{w}}}{\partial \hat{w}} = 2X^{T}(X\hat{w} - y) = 0
$$

最终解 (Normal Equation, 正规方程):
若矩阵 $X^{T}X$ 是可逆的(即满秩矩阵或正定矩阵),我们可以直接写出最优解:

$$
\hat{w}^{*} = (X^{T}X)^{-1}X^{T}y
$$

注意:如果 $X^{T}X$ 不可逆(例如特征之间存在多重共线性),通常需要使用伪逆矩阵或引入正则化项。

方法二:梯度下降 (Gradient Descent, GD)

当数据量很大时,计算矩阵的逆 $(X^{T}X)^{-1}$ 的计算复杂度高达 $O(D^3)$,这在计算上是非常昂贵的。此时,我们通常使用迭代优化算法。

1. 核心思想 (下山类比)

想象你被蒙住双眼站在一座山上,想要下到山谷最低处。你无法看到全貌,但你可以通过脚下的触感判断哪个方向是向下的。

  • 梯度:就是山坡最陡峭的上升方向。
  • 负梯度:就是下降最快的方向。
  • 策略:从任意位置 $\theta_0$ 开始,每次沿着负梯度方向走一步,重复此过程,直到到达谷底。

2. 更新公式

$$
\theta \leftarrow \theta - \alpha \nabla_{\theta} J(\theta)
$$

其中 $\alpha$ 是学习率 (Learning Rate),它控制了下山的步长大小。

  • $\alpha$ 太小:步子太碎,下山极其缓慢,消耗大量时间。
  • $\alpha$ 太大:步子过大,可能会直接跨过谷底冲到对面的山上(震荡),甚至越走越高(发散)。

3. 算法流程

  1. 随机初始化参数 $\theta$。
  2. 计算所有样本上的梯度 $\nabla_{\theta} J(\theta)$。
  3. 更新参数。
  4. 重复步骤 2-3 直到收敛(例如梯度范数小于阈值 $\epsilon$)。

方法三:随机梯度下降 (Stochastic Gradient Descent, SGD)

1. 动机

标准梯度下降(Batch GD)每走一步都需要计算所有 $m$ 个样本的梯度。如果 $m$ 是几百万甚至几亿,那么每更新一次参数都需要巨大的计算量,速度极慢。SGD 提出了一种更“鲁棒”的策略。

2. 算法流程

  1. 随机打乱数据集 (Shuffle)。
  2. 对每个样本 $i$ 循环:
    $$
    \theta \leftarrow \theta - \alpha \nabla_{\theta} J^{(i)}(\theta)
    $$
    其中 $J^{(i)}(\theta) = \frac{1}{2}(\theta^T x^{(i)} - y^{(i)})^2$ 仅仅是基于单个样本计算出的损失梯度。

SGD 的路径通常比较曲折(噪音较大),因为它只根据一个样本来决定方向,这个方向不一定是全局最优的下降方向。但也正因为这种随机性,SGD 有助于模型跳出一些浅的局部极小值(虽然在线性回归中只有一个全局最优解)。

3. 方法对比 (LMS / SGD vs GD vs Closed Form)

特性 闭式解 (Closed Form) 梯度下降 (GD) 随机梯度下降 (SGD)
优点 一步到位,得到精确解,无需迭代 迭代稳定,保证收敛到局部最优(线性回归中即为全局最优),简单易行 内存效率极高,收敛速度快(以更新次数计),易跳出局部最优
缺点 矩阵求逆计算量巨大 ($O(D^3)$),不适合大规模数据或高维特征 每次迭代需遍历所有数据,速度慢,内存消耗大 更新方向有噪音,可能会在最优解附近震荡,需要精细调节学习率衰减
适用场景 小规模数据 ($m < 10^4$) 中等规模数据,对精度要求高 大规模数据 ($m > 10^5$) / 在线流式学习

5. 概率解释 (Probabilistic Interpretation)

我们一直使用均方误差 (MSE) 作为损失函数,这仅仅是因为它计算方便吗?事实上,它背后有深刻的统计学原理支持。这可以从最大似然估计 (MLE) 的角度推导出来。

5.1 高斯噪声假设

假设预测值与真实值之间的关系为:

$$
y_{i} = \theta^{T}x_{i} + \epsilon_{i}
$$

其中误差项 $\epsilon_{i}$ 服从均值为 0,方差为 $\sigma^2$ 的高斯分布(正态分布):

$$
\epsilon_{i} \sim \mathcal{N}(0, \sigma^{2})
$$

5.2 似然函数推导

这意味着,在给定 $x_i$ 和参数 $\theta$ 的情况下,观察到标签 $y_i$ 的概率密度为:

$$
p(y_{i}|x_{i};\theta) = \frac{1}{\sqrt{2\pi}\sigma} \exp\left(-\frac{(y_{i} - \theta^{T}x_{i})^{2}}{2\sigma^{2}}\right)
$$

根据独立同分布 (IID) 假设,所有样本同时出现的概率(似然函数 $L(\theta)$)是各样本概率的乘积:

$$
L(\theta) = \prod_{i=1}^{m} p(y_{i}|x_{i};\theta)
$$

5.3 对数似然与 MSE 的等价性

为了计算方便,我们通常最大化对数似然 $l(\theta) = \log L(\theta)$,将乘积转化为求和:

$$
l(\theta) = \sum_{i=1}^{m} \log \left( \frac{1}{\sqrt{2\pi}\sigma} \exp\left(-\frac{(y_{i} - \theta^{T}x_{i})^{2}}{2\sigma^{2}}\right) \right)
$$

展开后得到:

$$
l(\theta) = m \log \frac{1}{\sqrt{2\pi}\sigma} - \frac{1}{2\sigma^{2}} \sum_{i=1}^{m} (y_{i} - \theta^{T}x_{i})^{2}
$$

观察上式,第一项是常数。要让 $l(\theta)$ 最大,就必须让减去的第二项最小。由于 $\sigma^2$ 是正数,这等价于最小化

$$
\sum_{i=1}^{m} (y_{i} - \theta^{T}x_{i})^{2}
$$

这正是我们的均方误差项!

结论: 当我们假设误差服从高斯分布时,使用最小二乘法 (LMS) 进行参数估计,本质上就是在做最大似然估计 (MLE)。这为线性回归使用 MSE 提供了坚实的概率论基础。

6. 扩展话题 (Advanced Topics)

6.1 对数线性回归 (Log-Linear Regression)

线性回归假设 $y$ 和 $x$ 之间是线性关系,但现实世界往往更为复杂。有时候数据并不是线性的,但我们可以通过数学变换构建广义的线性模型。

例如,在生物学中细菌的增长或经济学中的复利计算,往往遵循指数增长规律。如果输出标记 $y$ 的对数与特征 $x$ 呈线性关系:

$$
\ln y = w^{T}x + b
$$

这实际上是在拟合非线性模型:

$$
y = e^{w^{T}x + b}
$$

这种方法被称为对数线性回归。它展示了线性模型的灵活性:只要我们能找到一个单调可微的联系函数(Link Function)将非线性的 $y$ 映射到线性空间,我们依然可以使用线性回归的强大工具箱来解决问题。

PPT

Ref: SEU Mechine Learning Course