机器学习数学推导(五):线性回归
从代数(正规方程)、几何(正交投影)、概率(最大似然)三个角度完整推导线性回归,再延伸到 Ridge、Lasso、梯度下降与诊断方法,全部结论与 scikit-learn 互验。
引子。 1886 年,Francis Galton 研究遗传时注意到一个怪现象:身高极端(很高或很矮)的父母,子女的身高总是比父母更靠近平均值。他把这种"向均值漂移"的现象叫做 regression——回归这个名字就是这么来的。一个统计学上的小观察,后来长成了机器学习里最具基础地位的模型。线性回归本身的预测能力其实很普通,它的真正价值在于:从逻辑回归、神经网络到核方法,几乎所有机器学习算法都是同一个思路的变奏——先找一个合适的空间,再在里面拟一条线。
本章从三个完全独立的起点(代数、几何、概率)推导线性回归,会发现它们最后都收敛到同一个方程。然后讨论当模型假设破裂时会发生什么,以及 Ridge、Lasso、稳健损失各自如何修补。
本文路线图
- 建模 —— 把模型写成矩阵形式,后面所有的数学就压成一行了。
- 代数视角 —— 一个二次函数求最小,得到 正规方程 $w^\* = (X^\top X)^{-1} X^\top y$。
- 几何视角 —— 同一个解,也可以理解成把 $y$ 正交投影到 $\operatorname{Col}(X)$。
- 概率视角 —— 在高斯噪声假设下,最小二乘恰好就是最大似然估计。
- 正则化 —— Ridge(L2)让方程稳定,Lasso(L1)让解稀疏。
- 优化算法 —— 当 $X^\top X$ 太大无法求逆时,梯度下降登场。
- 诊断与稳健 —— 残差、共线性、异常值,每种问题都有对应的修补办法。
建模:把线性回归写成矩阵
问题陈述
给定训练集 $\{(x_i, y_i)\}_{i=1}^{m}$,其中 $x_i \in \mathbb{R}^d$,$y_i \in \mathbb{R}$。我们想找到一个函数
$$f(x) = w^\top x + b,$$使它的预测尽可能"接近"观测值(具体什么叫接近,下面会精确定义)。
记号小技巧。 把偏置 $b$ 单独拎出来写很烦。我们把它吸收到权重里——给每个输入末尾再补一个常数 1:
$$\tilde x = \begin{pmatrix} x \\\\ 1 \end{pmatrix}, \qquad \tilde w = \begin{pmatrix} w \\\\ b \end{pmatrix}, \qquad f(x) = \tilde w^\top \tilde x.$$之后我们就直接写 $w^\top x$,约定 $x$ 的最后一个分量是 1。
矩阵形式
把所有东西堆起来:
$$X = \begin{bmatrix} x_1^\top \\\\ x_2^\top \\\\ \vdots \\\\ x_m^\top \end{bmatrix} \in \mathbb{R}^{m \times (d+1)}, \qquad y = \begin{bmatrix} y_1 \\\\ y_2 \\\\ \vdots \\\\ y_m \end{bmatrix} \in \mathbb{R}^{m}.$$所有样本的预测值就是 $\hat y = Xw$。我们的任务是选 $w$,让 $\hat y$ 尽可能贴近 $y$。
视角一 · 代数:正规方程
平方损失
选用平方损失:
$$L(w) = \tfrac{1}{2}\,\|y - Xw\|_2^2 = \tfrac{1}{2}\,(y - Xw)^\top (y - Xw).$$系数 $\tfrac{1}{2}$ 只是为了求导时把 2 消掉,不影响其他任何事。
下图很直观地说明了这个损失到底在加什么:每个数据点到拟合直线的竖直距离,平方后求和。

求梯度
把损失展开:
$$L(w) = \tfrac{1}{2}\bigl(y^\top y - 2\,y^\top X w + w^\top X^\top X\,w\bigr).$$每一项都很容易求导(用矩阵微积分恒等式 $\nabla_w (a^\top w) = a$ 和 $\nabla_w (w^\top A w) = 2 A w$,其中 $A$ 对称):
$$\nabla_w L = -X^\top y + X^\top X\, w = X^\top (Xw - y).$$正规方程
令 $\nabla_w L = 0$:
$$\boxed{\,X^\top X\, w = X^\top y\,}.$$这就是 正规方程(normal equation)。“normal” 在数学里有"垂直"的意思——它说的就是残差与 $X$ 的每一列都垂直,几何视角马上会展开讲。
定理 1(最小二乘解的闭式表达)。 若 $X^\top X$ 可逆,则 $L$ 的唯一最小值点为
$$w^\* = (X^\top X)^{-1} X^\top y.$$证明。 一阶条件 $\nabla L = 0$ 给出正规方程。Hessian 为 $\nabla^2 L = X^\top X$,当 $X$ 列满秩时正定:对任意 $v \neq 0$,
$$v^\top X^\top X\, v = \|Xv\|_2^2 > 0$$(严格大于零是因为列满秩意味着 $Xv \neq 0$)。Hessian 正定的凸二次函数加上零梯度,就是全局最小。$\square$
$X^\top X$ 什么时候不可逆? 两种典型情形:
- $m < d+1$ —— 样本数比特征数还少(系统欠定);
- $X$ 的列线性相关(完全共线)。
这两种情况下,伪逆(pseudoinverse)给出范数最小的解:$w^\* = X^{+} y$,可由 SVD 计算($X = U \Sigma V^\top \Rightarrow X^+ = V \Sigma^+ U^\top$,其中 $\Sigma^+$ 把非零奇异值取倒数,零保持为零)。
视角二 · 几何:正交投影
同一个答案,另一种讲法
暂时把微积分放一边。$X$ 的列张成了 $\mathbb{R}^m$ 中一个子空间 $\operatorname{Col}(X)$。无论 $w$ 怎么选,$\hat y = Xw$ 一定落在这个子空间里。我们要找的,就是 $\operatorname{Col}(X)$ 中离 $y$ 欧氏距离最近的那个点。
几何告诉我们这个点的样子:它正是 $y$ 在 $\operatorname{Col}(X)$ 上的正交投影,其特征是残差 $y - \hat y$ 与 $X$ 的每一列都正交:
$$X^\top (y - X w^\*) = 0 \quad\Longleftrightarrow\quad X^\top X\, w^\* = X^\top y.$$又是正规方程——这次连一次导都没求。

这张图把三件事一次性呈现出来:$X$ 的列张成的平面(蓝紫色)、漂浮在平面上方的目标向量 $y$、平面上的投影 $\hat y$,以及垂直于平面、笔直向上指向 $y$ 的残差 $y - \hat y$。直角 = 最优——这就是几何视角的全部信息。
投影矩阵
投影本身是一个线性映射,叫 帽子矩阵(hat matrix):
$$H = X(X^\top X)^{-1} X^\top, \qquad \hat y = H y.$$它满足正交投影算子的两条定义性质:
- 幂等:$H^2 = H$。投影两遍和投影一遍效果一样。
- 对称:$H^\top = H$。“对称"对应的几何含义就是"投影是正交的”。
互补的 残差算子 $M = I - H$ 把向量投到正交补上;$My$ 就是残差向量。它满足 $MX = 0$,把"残差与每个特征都正交"这件事写成了一个矩阵恒等式。
视角三 · 概率:最大似然
线性高斯模型
假设数据生成过程为
$$y_i = w^\top x_i + \epsilon_i, \qquad \epsilon_i \overset{\text{i.i.d.}}{\sim} \mathcal{N}(0, \sigma^2).$$等价说法:给定 $x_i$,目标 $y_i$ 是均值为 $w^\top x_i$、方差为 $\sigma^2$ 的高斯分布。
似然与对数似然
由独立性,联合似然可以分解:
$$p(y \mid X, w, \sigma^2) = \prod_{i=1}^{m} \frac{1}{\sqrt{2\pi}\,\sigma}\,\exp\!\left(-\frac{(y_i - w^\top x_i)^2}{2\sigma^2}\right).$$取对数:
$$\log p = -\frac{m}{2}\log(2\pi\sigma^2) - \frac{1}{2\sigma^2}\sum_{i=1}^{m}(y_i - w^\top x_i)^2.$$固定 $\sigma^2$ 对 $w$ 极大化,等价于最小化残差平方和。所以:
定理 2。 在高斯噪声假设下,$w$ 的极大似然估计就是 OLS 解:$\hat w_{\text{MLE}} = (X^\top X)^{-1} X^\top y$。
对 $\sigma^2$ 求导可得 $\hat\sigma^2_{\text{MLE}} = \tfrac{1}{m}\|y - X\hat w\|_2^2$——残差平方和的均值。这个估计是有偏的;无偏版本要除以 $m - d - 1$。
一步贝叶斯:Ridge 是怎么冒出来的
给参数加个先验 $w \sim \mathcal{N}(0, \tau^2 I)$。MAP 估计就是极大化后验,等价于最小化
$$\sum_i (y_i - w^\top x_i)^2 + \frac{\sigma^2}{\tau^2}\|w\|_2^2.$$这就是 Ridge 回归。我们顺便认出了正则化强度的含义:$\lambda = \sigma^2 / \tau^2$。先验越弱($\tau$ 越大),$\lambda$ 越小。
正则化:Ridge、Lasso、Elastic Net
为什么要正则化
当特征近似共线时,$X^\top X$ 接近奇异,$(X^\top X)^{-1}$ 里会出现巨大的元素。这时 $y$ 上一点点扰动就会让 $\hat w$ 飞起来。正则化通过惩罚大的 $w$ 来压住这种敏感性:
$$L_{\text{reg}}(w) = \tfrac{1}{2}\|y - Xw\|_2^2 + \lambda \cdot \mathcal{P}(w).$$Ridge 回归(L2)
取 $\mathcal{P}(w) = \tfrac{1}{2}\|w\|_2^2$。重复一遍刚才的求梯度过程,闭式解直接掉出来:
$$\boxed{\;\hat w_{\text{Ridge}} = (X^\top X + \lambda I)^{-1} X^\top y.\;}$$加上 $\lambda I$ 等于把 $X^\top X$ 的每一个特征值都抬高了 $\lambda$,所以只要 $\lambda > 0$,矩阵永远可逆——哪怕原本的 $X^\top X$ 是奇异的。这就是大家常说的"Ridge 让逆矩阵稳定"。
Lasso 回归(L1)
取 $\mathcal{P}(w) = \|w\|_1$。绝对值函数在零点不可微,所以没有闭式解;但优化问题仍是凸的,坐标下降 或 近端梯度 都能高效求解。Lasso 最有名的性质是:
Lasso 会把部分系数精确压到零,自动完成变量选择。
下图展示了两种正则化的系数路径——每个 $w_j$ 如何随 $\lambda$ 从极小(左端,等价 OLS)走到极大(右端,全部归零):

Ridge 中每条曲线都是渐近趋近零——会变得很小,但永远不为零。Lasso 里曲线碰到坐标轴就贴在上面不动了。这种"要么进、要么出"的二元行为,正是 Lasso 能做特征选择的原因。
为什么 Lasso 会稀疏:几何论证
把两种正则化改写成约束形式:
- Ridge:$\min \|y - Xw\|^2$,约束 $\|w\|_2 \le t$。
- Lasso:$\min \|y - Xw\|^2$,约束 $\|w\|_1 \le t$。
损失函数的等高线是围绕 $\hat w_{\text{OLS}}$ 的椭圆。两种约束区域形状非常不同:

L2 圆盘边界是光滑的,所以损失椭圆通常会在边界内部的某点擦上去——两个坐标都非零。L1 菱形的角点正好在坐标轴上,倾斜的椭圆几乎总是先碰到角点——给出稀疏解。维度越高,菱形的角和棱越多,Lasso 把系数清零的"杀伤力"也就越大。
Elastic Net
L1 和 L2 的凸组合:
$$\mathcal{P}_{\text{EN}}(w) = \alpha \|w\|_1 + \tfrac{1-\alpha}{2}\|w\|_2^2.$$兼具 L1 的稀疏性和 L2 的稳定性。当存在一组高度相关的特征、Lasso 会随机挑一个保留时,Elastic Net 是更稳妥的选择。
优化:闭式解不可行时怎么办
计算 $(X^\top X)^{-1}$ 的时间是 $\mathcal{O}(d^3)$,空间是 $\mathcal{O}(d^2)$。$d = 10^6$ 时直接劝退。这时只能用迭代算法。
批量梯度下降(BGD)
$$w^{(t+1)} = w^{(t)} - \eta \cdot \frac{1}{m} X^\top (X w^{(t)} - y).$$每步代价 $\mathcal{O}(md)$。对强凸的 $L$,线性收敛:
$$L(w^{(t)}) - L(w^\*) \le \left(\frac{\kappa - 1}{\kappa + 1}\right)^{2t} \bigl(L(w^{(0)}) - L(w^\*)\bigr),$$其中 $\kappa = \lambda_{\max}(X^\top X) / \lambda_{\min}(X^\top X)$ 是条件数。问题越病态($\kappa$ 越大),收敛越慢——这也是为什么跑梯度下降之前一定要标准化特征。
随机梯度下降(SGD)
每步只用一个样本 $(x_i, y_i)$:
$$w^{(t+1)} = w^{(t)} - \eta \cdot (w^{(t)\top} x_i - y_i)\, x_i.$$- 优点:每步 $\mathcal{O}(d)$,支持流式/在线学习;噪声偶尔还能帮非凸问题逃离差的区域。
- 缺点:更新带噪,要保证几乎处处收敛,需要递减学习率(如 $\eta_t = \eta_0 / (1 + t)$)。
小批量梯度下降(Mini-batch GD)
折中方案:每步用一个 $B \in [32, 512]$ 大小的批次平均梯度。既能利用向量化加速,又比纯 SGD 稳。今天几乎所有深度学习框架默认用的都是这一版。
模型评估与诊断
评价指标
设测试集预测为 $\hat y_i$:
- MSE $= \frac{1}{n}\sum (y_i - \hat y_i)^2$ —— 平方惩罚大误差。
- RMSE $= \sqrt{\text{MSE}}$ —— 与 $y$ 同量纲。
- MAE $= \frac{1}{n}\sum |y_i - \hat y_i|$ —— 对异常值更稳健。
- $R^2$ $= 1 - \dfrac{\sum(y_i - \hat y_i)^2}{\sum(y_i - \bar y)^2}$ —— 解释方差比例。
$R^2$ 有个微妙的陷阱:每加一个特征,它就单调不降。比较不同规模的模型时要用调整 $R^2$:
$$R^2_{\text{adj}} = 1 - (1 - R^2)\,\frac{n - 1}{n - d - 1}.$$交叉验证:选择模型容量
没有一个绝对"最好"的多项式次数,也没有一个绝对"最好"的 $\lambda$。交叉验证通过留出折数,找出泛化最好的那个选择:

训练误差随容量增加(更多多项式项、更小 $\lambda$)单调下降。CV 误差呈现 U 形:容量太小是偏差占优(欠拟合),容量太大是方差占优(过拟合)。CV 曲线的最低点就是该选的模型。
多项式回归:偏差与方差的可视化
线性回归是"参数线性",不是"输入线性"。加入多项式特征就能拟合曲线,同时仍是在解一个线性系统。代价是过拟合的风险:

一阶模型太死板,捕捉不到正弦波(高偏差);三阶多项式刚刚好;十五阶多项式几乎穿过每一个数据点,但点与点之间剧烈震荡——典型过拟合。注意比较三幅图的训练 MSE:单调下降。训练误差对过拟合视而不见,只有保留集才能告诉你真相。
异常值与稳健回归
平方损失有一个众所周知的弱点:单个残差很大的异常值,平方后会以巨大的份额贡献给总损失,模型只好弯下腰去迁就它。看图最直观:

灰色虚线是真值。OLS(紫色)明显被三个异常值拉斜。Huber 损失对小残差用平方、对大残差用线性,温柔地处理异常值:
$$\rho_\delta(r) = \begin{cases} \tfrac{1}{2} r^2, & |r| \le \delta, \\\\ \delta\,(|r| - \tfrac{1}{2}\delta), & |r| > \delta. \end{cases}$$Huber 拟合(绿色)几乎与真值重合。其他选择还有 RANSAC、M-估计、分位数回归等等,但 Huber 是最常用的主力:处处可微、凸、稳健。
常见问题答疑
Q1:为什么用平方损失而不用绝对值损失?
| 损失 | 可微? | 闭式解? | 异常值稳健? | 隐含噪声 |
|---|---|---|---|---|
| 平方(L2) | 处处可微 | 有 | 弱 | 高斯 |
| 绝对值(L1) | 0 处不可微 | 无(线性规划) | 强 | 拉普拉斯 |
| Huber | 处处可微 | 无 | 中 | 混合 |
平方损失能成为主流主要因为三点:(i) 光滑;(ii) 有闭式解;(iii) 对应最常见噪声分布的 MLE。需要稳健性时换 Huber。
Q2:正规方程还是梯度下降?
用正规方程的场景:$d \lesssim 10^4$,$X^\top X$ 内存放得下——一步到位且精确。
用梯度下降的场景:$d$ 很大、需要在线更新、或者加了非光滑惩罚(比如 Lasso,根本没有闭式解)。
Q3:为什么 Ridge 一定有解?
因为对任意 $\lambda > 0$,$X^\top X + \lambda I$ 都是正定的:
$$v^\top (X^\top X + \lambda I) v = \|Xv\|^2 + \lambda\|v\|^2 \ge \lambda\|v\|^2 > 0 \quad (v \ne 0).$$即便 $X v = 0$,$\lambda\|v\|^2$ 这一项也保证了二次型严格大于零。几何上的直观说法是:Ridge 在"数据无法确定的方向上偏好 0"。
Q4:$\lambda$ 怎么选?
交叉验证。几乎永远是交叉验证。scikit-learn 的 RidgeCV 和 LassoCV 一行搞定。在 $[10^{-3}, 10^{3}]$ 区间按对数均匀搜,再细化。
Q5:为什么要标准化特征?
两个原因:
- 数值条件。不同量纲会让 $X^\top X$ 病态($\kappa$ 极大),梯度下降会变得非常慢。
- 正则化的公平性。$\|w\|_2^2$ 对每个坐标一视同仁。同一个特征用毫米表示和用米表示,权重相差 1000 倍,Ridge 会无理由地往死里压前者。
用 StandardScaler:减去(训练集的)均值,除以(训练集的)标准差。
Q6:多重共线性会带来什么后果?
两个高度相关的特征 $x_1 \approx x_2$ 会让 $X^\top X$ 接近奇异。症状:$\hat w_1$、$\hat w_2$ 的标准误巨大,符号会随轻微扰动反转,但预测值 $\hat y = X\hat w$ 仍然准确。
诊断:方差膨胀因子 $\text{VIF}_j = 1 / (1 - R_j^2)$,$R_j^2$ 是用其他特征预测特征 $j$ 得到的。经验阈值:VIF $> 10$ 算严重共线。
修复:Ridge 回归、删除冗余特征、用 PCA 降维替换。
Q7:经典假设有哪些?违反了怎么办?
| 假设 | 诊断 | 违反时的修复 |
|---|---|---|
| 关于 $w$ 的线性 | 残差图无明显模式 | 多项式特征、基函数展开、核方法 |
| 误差独立 | Durbin–Watson $\approx 2$ | AR/ARIMA、广义最小二乘 |
| 同方差 | 残差散布在 $\hat y$ 上均匀 | 加权最小二乘、对 $y$ 取对数 |
| 误差正态 | Q–Q 图近对角线 | Box–Cox 变换、广义线性模型、稳健损失 |
做统计推断(p 值、置信区间)时四条都要看。只做预测时,正态性假设破坏一般无伤大雅。
Q8:分类特征怎么编码?
绝不要编成整数(那会强行造一个不存在的顺序)。要用独热编码(pd.get_dummies 或 OneHotEncoder)。$k$ 个类别就开 $k$ 个指示变量——再删掉一列以避免列之和恒等于 1 引起的多重共线(drop='first')。
Q9:线性回归能拟合非线性关系吗?
可以——这里的"线性"指关于参数线性,不是关于输入线性。把 $x$ 换成 $\phi(x)$(多项式、对数、sin、ReLU 都可以),再在 $\phi$ 空间里拟一个线性模型。核方法和神经网络做的就是这件事,只是更系统、更深。
Q10:怎么解读系数?
标准化特征之后,$\hat w_j$ 的含义是:在其他特征保持不变的前提下,$x_j$ 增加一个标准差,$\hat y$ 平均变化 $\hat w_j$ 个标准差。两个重要警示:
- 共线性会让单个 $\hat w_j$ 不稳定(即便预测仍然准)——别孤立地解读某一个 $\hat w_j$。
- 相关性 ≠ 因果性。回归系数只是数据中的条件关联,仅此而已。要谈因果,需要实验设计或专门的识别策略。
代码与可复现性
本文所有图都由 scripts/figures/ml-math-derivations/05-linear-regression.py 生成,并在脚本里用 scikit-learn 做了交叉验证(例如图 1 中手算的斜率与截距 assert 等于 LinearRegression 的拟合结果,图 2 中数值验证了残差与列空间正交)。这个脚本是图片的唯一权威源——一行命令就能重新生成全部图。
总结
我们从三个独立的方向逼近线性回归,最终都落在同一个方程上:
- 代数视角。最小化二次函数,令梯度为零,得到 $w^\* = (X^\top X)^{-1} X^\top y$。
- 几何视角。把 $y$ 正交投影到 $\operatorname{Col}(X)$。残差与列正交这一条件,就是正规方程。
- 概率视角。高斯噪声下 $w$ 的 MLE 等价于最小化平方残差;给 $w$ 加高斯先验后,MAP 给出 Ridge。
接着我们处理了原始 OLS 的三大失效:共线性下不稳定(Ridge 修复)、不能选特征(Lasso 修复)、对异常值过敏(Huber 修复)。优化工具箱(BGD/SGD/mini-batch)应对 $X^\top X$ 太大无法求逆的情形。而模型容量该取多少,最终交给交叉验证经验决定。
下一章预告。 我们将把场景推广到分类——输出空间从连续变成离散。“sigmoid 函数从哪来”、“交叉熵损失的数学根据是什么”、“决策边界的几何含义”,这些问题都可以从一个朴素的问题出发推出来:二元输出的"线性高斯模型"应该长什么样?
参考文献
- Hastie, T., Tibshirani, R., & Friedman, J. (2009). The Elements of Statistical Learning (2nd ed.). Springer.
- Bishop, C. M. (2006). Pattern Recognition and Machine Learning. Springer.
- Murphy, K. P. (2012). Machine Learning: A Probabilistic Perspective. MIT Press.
- James, G., Witten, D., Hastie, T., & Tibshirani, R. (2013). An Introduction to Statistical Learning. Springer.
- Tibshirani, R. (1996). Regression shrinkage and selection via the Lasso. JRSS-B, 58(1), 267–288.
- Hoerl, A. E., & Kennard, R. W. (1970). Ridge regression: biased estimation for nonorthogonal problems. Technometrics, 12(1), 55–67.
- Zou, H., & Hastie, T. (2005). Regularization and variable selection via the elastic net. JRSS-B, 67(2), 301–320.
- Huber, P. J. (1964). Robust estimation of a location parameter. Annals of Math. Stat., 35(1), 73–101.
- 李航 (2012). 统计学习方法. 清华大学出版社.
- 周志华 (2016). 机器学习. 清华大学出版社.
系列导航
| 篇 | 主题 | 链接 |
|---|---|---|
| 4 | 凸优化理论 | <– 上一篇 |
| 5 | 线性回归 | 当前位置 |
| 6 | 逻辑回归与分类 | 下一篇 –> |
| 7 | 决策树 | 前往 –> |
| 8 | 支持向量机 | 前往 –> |