线性代数之——最小二乘
1. 最小二乘
Ax=b 经常会没有解,当方程个数大于未知数个数,也即 m>n 时,列空间并不是 Rm 空间的全部,因此 b 可能不在列空间中,这时候方程组就无解,但我们不应该就此而停止。
也就是误差 e=b−Ax 并不总是能得到 0,这时候,如果误差 e 的长度尽可能的小,那我们就得到了最小二乘解 ˆx。
当 Ax=b 无解的时候,我们乘以 AT 来求解 ATAx=ATb。
假如我们要找到一条直线,让它距离 (0, 6) ,(1, 0),(2, 0) 这三点最近。没有直线 b=C+Dt 同时穿过这三点,我们要找的两个常数 C 和 D。
C+D⋅0=6C+D⋅1=0C+D⋅2=0
A=[101112]x=[CD]b=[600]
由于 b=(6,0,0) 不是 A 的列的一个线性组合,因此方程组无解。
ATAx=ATb→[3335][CD][60]
C=5D=−3
因此,距离这三点最近的一条直线为 b=5−3t。
2. 最小化误差
- 几何理解
任何 Ax 都是 A 的列的一个线性组合,它们都位于以 A 的列为基的一个平面中。因此,我们要找的就是平面中的一个距离 b 最近的向量,而这个向量就是 b 在这个平面中的投影 p。
- 代数理解
Ax=b=p+e 是不可解的,但 Aˆx=p 是可解的。我们需要最小化下面这个误差
||Ax−b||2=||Ax−p||2+||e||2
当取 x=ˆx,||Ax−p||2=0,因此最小误差为 |e||2。
![](https://upload-images.jianshu.io/upload_images/11895466-de4f58c0ffbb6e25.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- 微积分理解
误差函数可以表示为
![](https://upload-images.jianshu.io/upload_images/11895466-f98349fffa3e2d89.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
两个未知数有两个导数,当导数分别为零时,我们就得到了误差函数的最小值。
![](https://upload-images.jianshu.io/upload_images/11895466-d5800a42500645f9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
整理后我们得到
![](https://upload-images.jianshu.io/upload_images/11895466-0122ae8c95db5039.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
可以看到,这和 ATAx=ATb 得到的结果是一样的。也就是说当 ATAx=ATb 的时候 ||Ax−b||2 的偏导数为零。
在四个基本子空间中,这次我们将 b 分解为 b=p+e,这时候 ATAx=ATb 的零空间解只有零向量,因此最优解只有一个 Aˆx=p。
![](https://upload-images.jianshu.io/upload_images/11895466-5638ddaf5090b5c1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](https://upload-images.jianshu.io/upload_images/11895466-ee82f7655f20bfeb.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步