对于线性方程组,解的判别条件如下:
1. Ax=0 总有解,至少有零解
2. Am×nx=0
当 r(A)=n ,只有零解
当 r(A)<n ,有无穷多解
3. Am×nx=b
当 r(A)≠r(A|b) ,无解
当 r(A)=r(A|b)=n ,有唯一解
当 r(A)=r(A|b)=r<n ,有无穷多解
我一般我们会面临形如 Am×nx=b 的方程。我们考虑测量数据和我们需要的解的参数之间的关系,该方程的解可以分为以下几种情况:
- 如果 m<n ,未知数大于方程数。那么解不唯一,存在一个解矢量空间。
- 如果 m=n ,那么只要 A 可逆(非奇异,也就是满秩)就有唯一解,解为 x=A−1b 。
- 如果 m>n ,方程数大于未知数。方程一般没有解,除非 b 属于 A 的列向量组成的子空间。
我们考虑 m≥n 并且 r(A)=n 的情况。如果解不存在,我们找一个最接近 Am×nx=b 的解矢量仍然有意义,这个方程成为超定方程(方程大于未知数)。也就是说,我们寻找一个向量 x 使得 ∥Ax−b∥ 最小,这里的 ∥∙∥ 表示矢量范数。这样的 x 称为该超定方程组的最小二乘解。接下来讨论三种解最小二乘的方法,分别用奇异值分解、正规方程、QR分解。
奇异值分解(SVD)是最有用的矩阵分解方法中的一种。给定一个矩阵 Am×n(m≥n) ,存在一个正交矩阵 Um×m 和 Vn×n ,有
用奇异值分解在求线性最小二乘解的时候,我们找一个向量 x 使得 ∥Ax−b∥ 最小,我们可以化为(矩阵 U 具有保范性)
概括一下可以这样实现:
- 对 A 进行奇异值分解: A=UDVT
- 令 b′=UTb
- 求 yi=b′i/di , di 是D的第 i 个对角元素
- 所求的解为 x=Vy
我们通常会遇到齐次方程的情况,形如 Ax=0 ,有零解 x=0 ,然而我们不需要这样的解,需要的是非零解。对于超定方程,我们可以找到近似满足方程的非零解。对于解 x ,与上面非齐次的处理方式相同,我们令 y=VTx ,把问题转换为最小化 ∥Dy∥ ,做进一步处理,可以转换为最小化 ∥∥yTDTDy∥∥ 。有
线性最小二乘问题也可以使用正规方程(normal equations )的方法来解。考虑 Am×nx=b ,其中 m>n 。这个方程一般不存在解,所以去找最小化范数 ∥Ax−b∥ 的矢量 x 。把 A 写成列空间的形式 A=(a1,a2,...,an) ,其中 ai 为 m 维列向量,那么当 x 变量所有的值的时候,可以认为向量 Ax 遍历了 A 的整个列空间,即由 A 的列生成的 Rm 的子空间。而我们需要找到在这个子空间中最接近向量 b 的那个情况。
几何上我们可以这么理解,要是 Ax 最接近 b ,我们需要使得 ∥Ax−b∥ 最小,也就是让向量 Ax−b 垂直 A 的列空间。如下图
也就是说让 Ax−b 垂直 A 的每一列,即 aTi(Ax−b)=0 ,则有
QR分解是把一个矩阵分解为一个正交矩阵和一个上三角矩阵的积。对于矩阵 Am×n(m≥n) ,存在一个单位列正交矩阵 Qm×n (即 QTQ=In×n )和一个上三角矩阵 Rn×n ,使得
在解线性最小二乘,同上述方法一样,我们找一个向量 x 使得 ∥Ax−b∥ 最小,首先把矩阵 Q 扩充为一个正交矩阵 [Q,Q˜]∈Rm×m ,于是有
所以 ∥Ax−b∥ 最小也就是取 ∥∥Rx−QTb∥∥ 最小。所以最小二乘解为
线性最小二乘问题
Multiple View Geometry in Computer Vision,Second Edition
【泡泡机器人原创】SVD之最小二乘(推导与证明)