从一个问题开始
在实际现实世界的数据中,我们往往拥有比未知参数多得多的观测数据点(例如 1000 个数据点拟合一条直线 y=wx+b)。此时超定方程组 Ax=b 通常无解。我们该如何找到一组“最优”参数 x,使得预测误差最小?
答案是:把向量 b 正交投影到矩阵 A 的列空间上!
初学者直觉:太阳光照下的影子 (Sunlight Shadow)
在几何上,正交投影就像是自然界中的影子:
- 假设地面是投影轴/平面(列空间 C(A))。
- 向量 x 是一根从原点斜着指向天空的木棍。
- 当太阳在头顶正上方垂直照射时,地面上显现出的影子向量,就是正交投影 projv(x)!
- 连接木棍顶端与影子顶端的悬挂绳(残差向量 r=x−projv(x))必定垂直于地面(正交,夹角 90°)。这也是从木棍顶端到地面所有点中距离最短的一条线!
点击放大查看图:太阳光垂直照射下的正交影子与 90 度正交残差示意图
1. 线性无关、子空间与基 (Basis)
1.1 向量空间与子空间
向量集合 V 称为子空间,必须满足三个条件:
- 包含零向量 0∈V。
- 加法封闭:若 u,v∈V,则 u+v∈V。
- 数乘封闭:若 u∈V,c∈R,则 cu∈V。
1.2 张成空间与基
矩阵 A∈Rm×n 的列向量能张成一个空间,称为列空间 C(A)。
如果一组向量线性无关,且能张成整个子空间,则称这组向量为该子空间的基(Basis)。
- 标准正交基(Orthonormal Basis):若基向量 q1,…,qk 两两正交(qiTqj=0)且模长均为 1(∥qi∥2=1),则称为标准正交基。此时矩阵 Q=[q1,…,qk] 满足 QTQ=I。
2. Gram-Schmidt 正交化算法
如何把一组任意的线性无关基 {v1,v2} 转换为标准正交基 {q1,q2}?
点击放大查看图:Gram-Schmidt 逐步正交化过程三步分解图
算法步骤:
- 确定第一个方向:
u1=v1,q1=∥u1∥2u1
- 减去在第一个方向上的投影成分,得到正交残差:
u2=v2−(v2Tq1)q1
- 单位化第二个方向:
q2=∥u2∥2u2
减去投影: u2 = v2 - (v2ᵀq1)q1
Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.
3. 正交投影与正规方程 (Normal Equations)
求解 Ax=b 无解时的最小二乘解 x^:
我们要求残差 r=b−Ax^ 与列空间 C(A) 中的每一列都正交:
AT(b−Ax^)=0⟹ATAx^=ATb
这就是著名的正规方程(Normal Equations)。若 ATA 可逆,则最小二乘解为:
x^=(ATA)−1ATb
交互演练:二维正交投影实验室
下方的交互实验室展示了目标向量 x 在投影轴 v 上的正交投影及残差的直观变化:
💡目的:
本实验室用于直观演示向量的正交投影(Orthogonal Projection)及其几何意义:
- 1. 目标向量 x (绿)待投影的原向量,可调整其方向与长度。
- 2. 投影轴 v (蓝)投影的基准方向轴。
- 3. 投影向量 (橙)x 垂直“照射”在 v 轴上的影子,残差虚线永远与 v 轴成 90° 正交!
实时推导结果说明正交条件验证
正交投影向量:(3.30, 1.10)
垂直残差向量 r:(-0.30, 0.90)
残差正交验证 (vᵀ r):0 (完全正交 90°)
4. 手算演练:
手算练习 1:Gram-Schmidt 正交化手算全过程
给定两个线性无关的向量 v1=[30] 与 v2=[12],构造标准正交基 q1,q2:
- 第一步:基 1 直接单位化:
u1=v1=[30],∥u1∥2=32+02=3
q1=∥u1∥2u1=31[30]=[10]
- 第二步:求 v2 在 q1 方向上的投影并扣除:
v2Tq1=(1×1)+(2×0)=1
u2=v2−(v2Tq1)q1=[12]−1[10]=[02]
- 第三步:单位化 u2 得到 q2:
∥u2∥2=02+22=2,q2=21[02]=[01]
验证 q1Tq2=1×0+0×1=0(完全正交!)。
手算练习 2:用正规方程拟合最佳直线
假设有 3 个简单数据点 (x,y):(1,2),(2,3),(3,5),拟合直线 y=wx+b:
- 写出设计矩阵 A 与目标向量 b:
A=123111,b=235,θ=[wb]
- 第一步:计算 ATA 与 ATb:
ATA=[112131]123111=[1+4+91+2+31+2+31+1+1]=[14663]
ATb=[112131]235=[2+6+152+3+5]=[2310]
- 第二步:求解二元一次线性方程组 [14663][wb]=[2310]:
- 由第 2 行得:6w+3b=10⟹b=310−6w
- 代入第 1 行:14w+6(310−6w)=23⟹14w+20−12w=23⟹2w=3⟹w=1.5
- 解出 b=310−9=31≈0.3333。
最佳拟合直线方程为 y=1.5x+0.3333!
5. 动手实战:手写正规方程与 np.linalg.lstsq 直线拟合
下面的代码演示如何利用正规方程推导公式和系统内置的 lstsq API 对一组带噪音的数据点拟合直线 y=wx+b:
正规方程 vs np.linalg.lstsq 拟合直线代码对比 import numpy as np
# 1. 构造带有噪音的数据点 y = 2x + 1 + noise
np.random.seed(42)
x_data = np.array([1.0, 2.0, 3.0, 4.0, 5.0])
y_data = 2.0 * x_data + 1.0 + np.random.normal(0, 0.2, size=len(x_data))
# 2. 构造设计矩阵 A (包含常数项 1)
A = np.column_stack([x_data, np.ones_like(x_data)]) # shape: (5, 2)
b = y_data
# 解法 A: 用正规方程公式 (Aᵀ A)⁻¹ Aᵀ b 手算
theta_normal = np.linalg.inv(A.T @ A) @ A.T @ b
w_normal, b_normal = theta_normal[0], theta_normal[1]
# 解法 B: 使用 NumPy 官方求解器 np.linalg.lstsq
theta_lstsq, residuals, rank, s = np.linalg.lstsq(A, b, rcond=None)
w_lstsq, b_lstsq = theta_lstsq[0], theta_lstsq[1]
print(f"正规方程求解参数: slope w = {w_normal:.4f}, intercept b = {b_normal:.4f}")
print(f"np.linalg.lstsq求解: slope w = {w_lstsq:.4f}, intercept b = {b_lstsq:.4f}")
# 3. 验证残差向量 r 与设计矩阵 A 的列正交性 (Aᵀ r 应非常接近 0)
pred = A @ theta_normal
residual_vec = b - pred
orthogonal_check = A.T @ residual_vec
print("\n正交残差验证 (Aᵀ r):", np.round(orthogonal_check, 6)) # 应等于 [0, 0]
5. 常见错误与避坑指南
|
AᵀA 不可逆(奇异) | 特征列是否存在多重共线性(线性相关) | 使用伪逆、np.linalg.lstsq 或加入 L2 正则项(岭回归 λI) |
| 拟合直线遗漏了截距项 | 设计矩阵是否加上了全 1 列 | 拟合 y=wx+b 时,设计矩阵需写成 [x, 1] 的结构 |
| 残差与列空间不正交 | 坐标计算是否出错 | 用 A.T @ (b - A @ x_hat) 检查点积结果是否趋近于 0 |
检查清单 (Checklist)
自测题
- 给定 v1=[3,0]T,v2=[1,2]T,使用 Gram-Schmidt 算法求对应的标准正交基 q1,q2。
- 为什么在正规方程中要求残差 b−Ax^ 与 A 的列空间正交?正交与“距离最小”有什么关系?
- 在线性回归中,如果自变量存在完全共线性(如 x2=2x1),正规方程 (ATA)−1 会发生什么?如何解决?
- 【代码阅读题】在 NumPy 代码中
np.linalg.lstsq(A, b, rcond=None) 返回的第 2 个返回值 residuals 表示什么?
点击查看参考答案
- u1=[3,0]T,模长为 3,故 q1=[1,0]T。
u2=v2−(v2Tq1)q1=[1,2]T−(1)[1,0]T=[0,2]T。模长为 2,故 q2=[0,1]T。
- 因为在欧式几何中,点到子平面的最短距离就是垂直(正交)距离。正交残差能保证重构误差的 L2 范数最小。
- ATA 会变成奇异矩阵(秩亏损),不可逆,从而导致求解失败。解决办法是删除冗余特征、使用
lstsq 或加入岭正则化 (ATA+λI)−1。
residuals 表示平方残差和(Sum of Squared Residuals),即 ∥b−Ax^∥22。
下一步
进入下一个专项 ,学习特征值与特征向量、对称矩阵对角化以及协方差矩阵主方向与正定矩阵二次型。
参考资料
- :第 3 章 几何向量与正交投影。
- :正交投影与正规方程。