
1. 从几何投影理解最小二乘问题想象你站在一个漆黑的房间里手电筒的光束打在墙面上形成一个光斑。这个光斑其实就是你的手电筒光束在二维墙面上的投影。线性代数中的投影概念与此非常相似——将一个高维空间中的向量投射到低维子空间上。在最小二乘问题中我们常常会遇到超定方程组方程数量多于未知数的情况。比如用直线拟合5个数据点时这就像试图用一个二维的直线子空间去捕捉五个高维数据点的投影。由于数据点通常不在同一直线上我们转而寻找能让投影误差最小的解。这里出现了一个有趣的几何现象当我们把数据点垂直投影到拟合直线上时这段垂直距离就是残差。最小二乘法的精髓就在于它找到的直线使得所有数据点的投影残差平方和最小。这就引出了投影矩阵的概念import numpy as np # 生成一个随机矩阵 A np.random.rand(5,2) # 计算投影矩阵P A(A^TA)^{-1}A^T P A np.linalg.inv(A.T A) A.T这个投影矩阵P的神奇之处在于当它作用在任何向量上时都会将该向量投影到A的列空间——也就是所有可能线性组合构成的空间。2. 伪逆矩阵的诞生与定义当矩阵A是可逆方阵时解线性方程组Axb非常直接xA⁻¹b。但现实问题中我们经常遇到两种麻烦矩阵瘦高型矩阵mn方程数多于变量通常无精确解矮胖型矩阵mn变量数多于方程通常有无穷多解1955年数学家Roger Penrose提出了伪逆矩阵又称Moore-Penrose逆的精确定义。一个矩阵A的伪逆A⁺必须满足以下四个条件AA⁺A AA⁺AA⁺ A⁺(AA⁺)^T AA⁺(A⁺A)^T A⁺A这就像给残疾的矩阵配了一副合适的拐杖。以瘦高型矩阵为例它的伪逆计算公式为A⁺ (A.T A)^(-1) A.T我曾在传感器校准项目中遇到过这样的案例用12个传感器的读数来估计3个物理量。这本质上就是在解一个超定方程组伪逆矩阵在这里发挥了关键作用。3. 伪逆求解最小二乘问题的机理伪逆矩阵与最小二乘的深刻联系体现在以下推导中对于方程组Axb我们最小化残差平方和‖Ax-b‖²。通过对x求导并令导数为零会神奇地得到A.T A x A.T b这正是著名的正规方程。当A列满秩时其解为x (A.T A)^(-1) A.T b A⁺b几何上看A⁺b实际上做了两件事将b投影到A的列空间得到b̂在A的列空间中找出对应的x对于秩亏损矩阵SVD分解给出了更稳健的伪逆计算方式U, S, Vt np.linalg.svd(A, full_matricesFalse) S_plus np.diag([1/s if s1e-10 else 0 for s in S]) A_plus Vt.T S_plus U.T4. 伪逆的统一求解框架伪逆最令人惊叹的地方在于它统一处理了超定和欠定两种情况超定情况给出最小二乘解欠定情况给出最小范数解这就像一把瑞士军刀能应对各种线性方程组的求解场景。在机器人路径规划中我们经常需要处理关节空间的冗余自由度欠定系统伪逆给出的最小范数解意味着最节能的运动方式。实际计算时我建议使用SVD而非直接求逆因为数值稳定性更好能自动处理秩亏损情况可以控制截断阈值处理噪声以下是一个多项式拟合的完整示例# 生成带噪声的二次函数数据 x np.linspace(0, 1, 100) y 2 3*x 4*x**2 0.1*np.random.randn(100) # 构建范德蒙德矩阵 A np.vander(x, 3) # 伪逆求解 coeff np.linalg.pinv(A) y print(f拟合系数{coeff[::-1]}) # 应接近[2,3,4]在深度学习时代虽然反向传播等迭代方法更常用但伪逆仍在线性层初始化、网络压缩等场景发挥着独特作用。它的数学之美在于将几何直观与代数运算完美结合为线性模型提供了坚实的理论基础。