正交、投影与最小二乘
精确答案不存在时,怎样找最近的答案
上一章里,我们用特征向量寻找矩阵最自然的方向:沿着这些方向,矩阵只做缩放。那套想法很漂亮,但它解决不了一个在数据中更常见的问题——方程本身没有精确解。
比如我们想用一条直线穿过三个测量点。直线只有截距和斜率两个参数,三个点却会给出三个方程。只要数据稍有波动,这三个方程就无法同时成立。此时继续问“哪个 x 满足 Ax=b”已经没有意义,因为这样的 x 根本不存在。
真正有用的问题是:在所有能写成 Ax 的向量中,哪一个离 b 最近?
xmin∥b−Ax∥2
这一章会把这件事拆开。我们先用点积说清楚长度、角度和正交,再把“最近”翻译成投影,最后由残差的垂直关系推导出最小二乘法方程。整条主线只有一个几何动作:把够不到的 b,垂直落到能够到达的列空间上。
当 Ax=b 无解时,我们不修改 A,也不假装误差不存在。我们在 A 的列空间里找离 b 最近的向量 p=。剩下的残差 垂直于整个列空间。
点积把长度和方向放进同一个数
点积不是“向量乘法表”
对两个同维向量
u=u
点积定义为
uTv=u⋅v=u1v1
结果是一个数。这个数记录了两个向量在方向上“顺不顺”:大致同向时为正,大致反向时为负,恰好垂直时为零。
你也可以把 u⋅v 看成一个带尺度的“同向分量”。如果把 u 加倍,点积也会加倍;如果把 v 换成反方向,点积会变号。它满足
u⋅v=v⋅u
以及
u⋅(cv+dw)=c(u⋅v)+d(u⋅w)
后面我们把“残差和每一列都垂直”合并成 ATr=0,靠的正是这种线性。
长度是自己和自己的点积
一个向量和自己方向完全一致,因此
u⋅u=u12+⋯+un2
这正是长度的平方:
∥u∥=u⋅u
例如 u=(3,4),那么
∥u∥=32+42=
二维里的勾股定理并没有在高维失效,它只是换成了点积的写法。
夹角为什么由点积决定
对两个非零向量,夹角 θ 满足
u⋅v=∥u∥∥v∥cosθ
所以
cosθ=∥u∥∥v∥u⋅v
这个公式不是凭空规定的。把 u、v 和 u−v 组成一个三角形,对余弦定理与
∥u−v∥2=(u−v)⋅(u−v)
分别展开,消去相同的长度平方,就会留下上面的点积公式。高维里虽然画不出整个空间,这个代数推导仍然成立。
分式一定落在 [−1,1] 内,因为点积满足
∣u⋅v∣≤∥u∥∥v∥
因此夹角确实能由反余弦得到。若点积为正,夹角是锐角;为零时是直角;为负时是钝角。

点积的符号告诉我们两个方向是更偏同向、垂直还是反向。
零向量和任何向量的点积都是零,但通常不谈零向量与其他向量的夹角,因为零向量没有方向。判断夹角时要先确认两个向量都非零;判断正交时则可以直接检查点积。
一个只靠符号就能判断的例子
设
u=(1,2,2),v=(2,0,1)
那么
u⋅v=1⋅2+2⋅0+2⋅1=4
我们甚至不用把角度算成小数。点积为正,所以夹角小于 90∘。若确实需要角度,再计算
∥u∥=3,∥v∥=5
从而
θ=arccos(354)
正交:互不干扰的方向
从直角到勾股分解
若
u⋅v=0
就称 u 与 v 正交。在二维和三维里,这就是熟悉的垂直;到了高维,“正交”仍由同一个点积条件定义。
正交最有用的地方,是展开平方长度时交叉项消失:
∥u+v∥2
这就是向量形式的勾股定理。

正交时没有交叉项,两个方向对总长度的贡献可以分别计算。
正交子空间比“两条线垂直”更严格
如果子空间 V 中的每个向量都和子空间 W 中的每个向量正交,我们才说 V 与 W 是正交子空间。只找到一对垂直向量远远不够。
例如房间的两面墙在几何上以直角相交,但把它们都看成穿过原点的平面子空间时,它们共享一条非零直线。共享直线上的向量不可能和自己正交,所以这两个平面并不是正交子空间。
正交补:把“所有垂直方向”收在一起
给定子空间 W⊆Rn,它的正交补定义为
W⊥={z∈Rn:z⋅w=0,对每个 w∈
直线的正交补是一条垂直直线;三维空间中平面的正交补是一条法向量方向;Rn 中同样如此,只是我们不一定画得出来。
若 A 的列空间记作 Col(A),那么
Col(A)⊥=Null(AT)
为什么?一个向量 r 垂直于 A 的每一列,等价于每个列向量与 r 的点积都为零。把这些点积排成一列,正好就是
ATr=0
这条关系会直接把“残差垂直列空间”变成法方程。
类似地,行空间与零空间互为正交补:
Row(A)⊥=Null(A)
前几章学过的四个基本子空间,在这里第一次被“正交”这条线串了起来。
正交基与正交归一基
普通基的问题:每个方向会牵动别的方向
一组基只要求能够张成空间且线性无关,并不要求方向彼此垂直。对普通基求坐标时,我们通常要解一个线性方程组,因为改变一个系数时,几何位置可能同时沿多个直观方向移动。
若基向量 u1,…,uk 两两正交,它们构成正交基。若还满足
∥ui∥=1
它们就构成正交归一基,也常简称标准正交基。下面记为 q1,…,qk。
正交归一基最省事的地方,是坐标可以直接用点积读出来。若 x 在它们张成的子空间里,那么
x=(q1Tx)q1+⋯+(q
拿 qjT 乘等式两边,其余项都会因为正交变成零,只留下第 j 个系数。这就是“点积就是坐标”的原因。

普通基下要联立求坐标;正交归一基下,每个坐标可由一次点积单独取出。
把基向量排成矩阵
令
Q=[q1⋯
列向量正交归一意味着
QTQ=Ik
因此 x=Qc 的坐标可以直接写成
c=QTx
若 Q 还是方阵,那么
Q−1=QT
而且它保持长度和夹角。例如
∥Qx∥2=xTQTQx=xT
这样的 Q 叫正交矩阵。它在几何上只做旋转、反射,或两者的组合,不会把空间拉长或压短。
“正交矩阵”这个名字容易误导。方阵 Q 并不是要求矩阵里的所有数字彼此正交,而是要求它的列向量构成正交归一基。只有 QTQ=I 还不够让一个矩形矩阵拥有双边逆;当 Q 为方阵时,才同时有 Q。
投影到一条直线:先找到影子,再看剩下多少
最近点一定留下垂直残差
把向量 b 投影到非零向量 a 张成的直线 span(a) 上。直线上的点都能写成
p=ca
我们要找的是离 b 最近的那个 p。想象从 b 的箭头终点向直线拉一根绷紧的细线:最短时,细线一定与目标直线垂直。因此残差
r=b−p=b−ca
满足
aT(b−ca)=0
解出
c=aTaaTb
所以
p=proja(b)=aTaa
这里的分母不能随便丢掉。aTb 会随 a 的长度变化,除以 aTa 后,投影才只取决于直线方向,而不取决于我们选了多长的方向向量。
若 a 已经是单位向量,aTa=1,公式才简化为
p=(aTb)a

投影把 b 唯一分成直线内的部分 p 和直线外的垂直部分 r。
完整算一次,并做垂直检查
把
b=(3,5)
投影到
a=(2,1)
张成的直线上。
先算投影系数需要的两个点积:
aTb=2⋅3+1⋅5=11
为什么垂直点就是全局最近点
设 y 是直线上的任意另一个点。因为 b−p 垂直于直线,而 p−y 位于直线上,所以
b−y=(b−p)+(p−y)
是一个直角分解。由勾股关系,
∥b−y∥2=∥b−p∥2+∥p−y∥
右边第二项不可能为负,因此
∥b−y∥≥∥b−p∥
并且只有 y=p 时取等号。这不只是图上的直觉,而是一个对任意维数都成立的最近点证明。
投影矩阵:把“落影子”写成一个线性变换
直线上的投影矩阵
把直线投影公式稍微换个顺序:
p=aaTaaTb=
因此投影到 span(a) 的矩阵是
P=aTaaaT
例如 a=(2,1)T 时,
P=51[422
于是任何 b 的投影都可直接写成 p=Pb。
投影到由多列张成的子空间
现在让 A 的列向量线性无关,目标子空间是
W=Col(A)
投影 p 必须在列空间里,所以可写成
p=Ax^
残差 r=b−p 要垂直于列空间中的每个方向。只需检查它和 A 的每一列都垂直:
AT(b−Ax^)=0
整理得到
ATAx^=ATb
若 A 的列线性无关,ATA 可逆,于是
x^=(ATA)−1ATb
再代回 p=Ax^:
p=A(ATA)−1ATb
所以投影到 Col(A) 的矩阵是
P=A(ATA)−1AT

投影点 p 位于列空间中,残差 r 位于它的正交补,也就是 Null(AT) 中。
投影矩阵的两个“指纹”
正交投影矩阵满足
PT=P
以及
P2=P
第一条说它是对称矩阵。第二条很好理解:第一次投影后,p 已经在目标子空间里;再投影一次,它不会继续移动。
如果我们已经有子空间的一组正交归一基,并把它们排成 Q,投影矩阵会变得更简单:
P=QQT
因为 QTQ=I,此时不用再计算 (ATA)−1。这正是下一节把普通基改造成正交归一基的实际价值。
P2=P 描述的是投影,但仅有这条还不能保证是正交投影。斜着沿某个方向把向量压到子空间上,也会满足 P2=P。再加上 ,才得到这里讨论的正交投影。
Gram–Schmidt:把纠缠的基整理成正交方向
每来一个新向量,就减掉旧方向的影子
给定线性无关向量
a1,a2,…,ak
我们希望找到张成同一子空间的正交归一向量
q1,q2,…,qk
Gram–Schmidt 的动作很直接。第一个方向只做单位化:
q1=∥a1∥a1
第二个向量先减掉它在 q1 上的投影:
u2=a2−(q1Ta
再单位化:
q2=∥u2∥u2
第三个向量要把前两个方向上的影子都减掉:
u3=a3−(q1
q3=∥u3∥u3
后面的向量照此继续。每一步都只减去已经确认过的正交方向,因此新的 uj 会和此前所有 qi 垂直。
三个向量的完整整理
从
a1=
开始。
第一个方向单位化:
q1=2
它同时给出 QR 分解
把原向量排成
A=[a1a2
把整理后的方向排成
Q=[q1q
每个 aj 都能由前 j 个 qi 组合出来,因此
A=QR
其中 R 是上三角矩阵。这就是 QR 分解。它会在最小二乘的数值计算中比直接形成 ATA 更稳。
Gram–Schmidt 的输入必须线性无关。若某个新向量本来就是前面向量的线性组合,减完所有旧方向后会得到零向量,接着无法单位化。这个“失败”不是算法出了错,而是在准确报告:新向量没有带来新方向。
最小二乘:把无解方程改成最近点问题
数据方程为什么常常无解
假设用模型
y=c+mt
拟合 m 个观测点 (ti,yi)。每个点给出一个近似方程
c+mti≈yi
把它们排在一起:
也就是
Ax≈b
这里 A 的第一列控制整体上下移动,第二列控制随 t 变化的倾斜。所有可能的预测向量 Ax 都在 Col(A) 里。观测向量 b 通常不在这个二维子空间里,于是精确方程 Ax=b 无解。
最小二乘选择
x^=xargmin∥b−Ax∥2
若把残差写成
r=b−Ax
目标就是最小化
∥r∥2=r12+⋯+rm
之所以平方,一方面是正负残差不会互相抵消,另一方面是平方长度与正交投影恰好使用同一套几何。

直线拟合中的每个残差是观测值减预测值;最小二乘最小化这些残差的平方和。
法方程不是一条硬背的规则
最佳预测向量
p=Ax^
是 b 在列空间上的投影。因此最佳残差
r=b−Ax^
垂直于列空间。A 的每一列都在列空间里,于是
ATr=0
代入残差:
AT(b−Ax^)=0
整理得
ATAx^=ATb
这就是法方程。“法”在这里说的是法向、垂直:残差是列空间的法向量。公式看起来像一次矩阵变形,真正逼出它的是“最近点留下垂直残差”。
最小二乘解 x^ 通常不满足原方程 Ax^=b。它满足的是法方程。只有当 b 本来就在列空间里时,残差才为零,最小二乘解才同时是精确解。
完整例题:给三个点拟合一条直线
先把数据翻译成列空间问题
考虑三个点:
用
y=c+mt
拟合。对应的矩阵方程是
111
三个点不共线,所以没有一个 c,m 能让三个等式同时成立。我们转而解法方程。
一步一步算出最佳直线
令
A=111
先计算法方程左边的矩阵:
ATA=[33
残差检查比答案小数更重要
第一列 (1,1,1)T 控制截距,第二列 (0,1,2)T 控制斜率。最优残差要同时垂直于这两列:
\begin{bmatrix}
1&1&1
\end{bmatrix}
r
=-rac16+rac13-rac16=0
[012]r=
第一条说明残差总和为零,整体没有继续把直线向上或向下移动的余地。第二条说明带 t 权重的残差总和为零,继续调整斜率也不会让平方和下降。
残差平方和是
∥r∥2=361+91
注意几何发生在 R3 的数据空间里:b 被投影到 A 两列张成的平面上。我们画在 (t,y) 坐标系中的拟合直线,是同一计算的另一种展示,不要把这两个空间混成一张图。
什么时候解唯一,什么时候要更谨慎
满列秩保证参数唯一
若 A 的 n 列线性无关,就说 A 满列秩。此时对任何非零向量 z,都有 Az=0,所以
zTATAz=(Az)T(Az)=∥A
这说明 ATA 可逆,法方程只有一个解:
x^=(ATA)−1ATb
在线性拟合中,只要所有 ti 不全相同,常数列与 t 列就线性无关,因此截距和斜率能够被唯一确定。
列相关时,最近的预测仍然唯一,参数却可能不唯一
如果 A 的列线性相关,那么存在非零 z 满足
Az=0
于是 x 和 x+z 给出完全相同的预测:
A(x+z)=Ax
因此最近的投影向量 p 仍然唯一,但产生这个 p 的参数向量可能有很多个。此时 ATA 不可逆,不能使用显式逆公式。下一章的 SVD 会给出一种自然选择:在所有最小二乘解中取长度最小的那个。
手算公式和计算机算法不是一回事
在纸上,法方程最适合解释原理;在计算机里,直接形成 ATA 往往不是首选。原因是列向量若几乎相关,ATA 会把数值上的不稳定放大,可能丢失更多有效数字。
若 A=QR 且 Q 的列正交归一,那么
∥b−Ax∥2=∥b−QRx∥2
残差垂直列空间给出更简洁的方程
Rx=QTb
实际软件通常使用稳定的 QR 实现;若矩阵接近降秩或确实不满秩,则常用 SVD。入门阶段不需要手写这些数值算法,但要记住:
- 公式 (ATA)−1ATb 适合说明结构,不代表程序里应该真的先求逆。
- 列几乎相关时,参数可能对微小数据误差很敏感,即使拟合值看起来变化不大。
- 看到异常大的正负参数时,应检查列的尺度与相关性,而不是只看残差平方和。
残差小只说明当前模型在这些数据点上贴得近,不自动说明模型有因果意义,也不保证它在数据范围外预测可靠。若残差呈现弯曲趋势、连续同号或被少数离群点支配,先检查模型是否合适。
常见误区
把点积为零理解成“其中一个必为零”
例如 (3,4) 与 (4,−3) 都不是零向量,但
(3,4)⋅(4,−3)=12−12=0
点积中的正负贡献可以抵消,结果为零表示正交。
忘记投影公式的分母
只有投影方向已经单位化时,才能写成 (aTb)a。对一般非零 a,必须写成
aTaaTba
否则把同一方向向量放大后,投影结果竟会改变,这显然不合理。
以为投影一定把向量变短一点
投影可能等于原向量,也可能是零向量,还可能落在所选方向的反向延长线上。它的定义不是“缩短”,而是目标子空间中的最近点。
以为最小二乘让每个残差分别最小
一条直线通常不能同时照顾每一个点。最小二乘最小化的是总平方和
i∑ri2
不是逐个把每个 ∣ri∣ 都压到最小,也不是让残差总和最小。带截距的直线拟合恰好会有 ∑iri=0,但那是正交条件的结果;若直接最小化残差总和,正负误差会互相抵消。
看到法方程就立刻求逆
先检查 A 是否满列秩。即使可逆,手算也常常直接解线性方程比显式写逆矩阵更省事;数值计算则优先考虑 QR 或 SVD。
练习
练习一:点积、长度与角度
设 u=(1,2,2),v=(2,0,1)。计算 u⋅v、、,并判断夹角是锐角、直角还是钝角。
u⋅v=1⋅2+2⋅0+2⋅1=4
练习二:求正交补
在 R3 中,平面
W={(x,y,z):x+2y−z=0}
的正交补是什么?
平面的方程说明法向量是 (1,2,−1)。平面中的每个向量都与这个法向量正交,因此
W⊥=span{(1,2,−1)}
练习三:投影到一条直线
把 b=(4,1) 投影到 a=(1,2) 张成的直线上,求投影 p 和残差 r=b−,并检查 是否垂直于 。
aTb=1⋅4+2⋅1=6,aT
练习四:做一次 Gram–Schmidt
把
a1=(1,1),a2=(1,0)
整理成 R2 的一组正交归一基。
先单位化 a1:
q1=2
练习五:判断残差是否可能最优
设
A=11
这个 r 能否是某个最小二乘解对应的残差?
最优残差必须满足 ATr=0。计算
练习六:独立完成一条拟合直线
用 y=c+mt 拟合数据点 (1,2),(2,3),(3,5),(4,4)。求最佳拟合直线,并检查残差与 的两列正交。
A=
从正交方向走向奇异值分解
这一章从无解的 Ax=b 出发,找到了列空间中的最近答案。点积负责测量长度和夹角;正交补收集所有垂直方向;投影把 b 分成可解释部分 p 与剩余部分 r;Gram–Schmidt 把普通基整理成互不干扰的正交方向;最小二乘则把这套几何变成可计算的法方程。
最核心的两条式子是
ATAx^=ATb
和
AT(b−Ax^)=0
它们说的是同一件事:最佳近似留下的残差,已经不能沿模型允许的任何方向继续缩短。
正交方向还有更大的用途。下一章的奇异值分解会为任意矩阵找出一组正交输入方向和一组正交输出方向,再把矩阵的作用解释成“换到主轴、沿主轴缩放、换到输出方向”。当 A 接近降秩、列几乎相关时,SVD 也会比法方程更清楚地告诉我们:哪些方向可靠,哪些方向几乎已经被压没了。