\qquad看了很多关于最小二乘解的博客,事实上都没有找到自己想要的证明过程,后来学了矩阵函数时才彻底搞明白了这件事情,所以和大家简单分享如下:
\qquad已知矩阵Am×n(m>n)A_{m×n}(m>n)Am×n(m>n)是列满秩的,则超定方程组Ax=BAx=BAx=B的最小二乘解为
x=(ATA)−1ATBx=(A^TA)^{-1}A^TBx=(ATA)−1ATB
\qquad需要说明的是根据线性代数的知识,rank(ATA)=rank(AAT)=rank(A)=nrank(A^TA)=rank(AA^T)=rank(A)=nrank(ATA)=rank(AAT)=rank(A)=n,而ATAA^TAATA的维数是n×n,所以ATAA^TAATA一定可逆。事实上MATLAB矩阵求伪逆用的也是这个公式(只不过令B=EmB=E_mB=Em)。
\qquad最小二乘法是让近似解代入的等式右边的B∗B^*B∗与BBB的度量最小,为了和向量的模长兼容,这里取的是矩阵的Frobenius范数(详见这里)因此问题转换为
x∗=argminx∣∣B∗−B∣∣Fs.t.Ax∗=B∗x^*=arg\min_{x}||B^*-B||_F\\ s.t.Ax^*=B^*x∗=argxmin∣∣B∗−B∣∣Fs.t.Ax∗=B∗
为了简便起见,我们仅讨论B是向量的情况(事实上矩阵的情况也可以通过向量化的方法加以解决),即Ax=bAx=bAx=b。
该问题也等价为
F(x)=(Ax−b)T(Ax−b)x∗=argminxF(x)F(x)=(Ax-b)^T(Ax-b)\\ x^*=arg\min_{x}F(x) F(x)=(Ax−b)T(Ax−b)x∗=argxminF(x)
将F(x)F(x)F(x)展开如下:
F(x)=(Ax−b)T(Ax−b)=(xTA−bT)(Ax−b)=xT(ATA)x−bTAx−ATbx+bTb=xT(ATA)x−2xT(ATb)+bTb\begin{aligned} F(x)&=(Ax-b)^T(Ax-b)\\ &=(x^TA-b^T)(Ax-b)\\ &=x^T(A^TA)x-b^TAx-A^Tbx+b^Tb\\ &=x^T(A^TA)x-2x^T(A^Tb)+b^Tb \end{aligned} F(x)=(Ax−b)T(Ax−b)=(xTA−bT)(Ax−b)=xT(ATA)x−bTAx−ATbx+bTb=xT(ATA)x−2xT(ATb)+bTb
需要说明的是bTAxb^TAxbTAx是数,因此它等于本身的转置等于ATbxA^TbxATbx,下面就是求F(x)F(x)F(x)的最小值,由于AATAA^TAAT是半正定的(因为xT(AAT)x=(ATx)T(ATx)≥0x^T(AA^T)x=(A^Tx)^T(A^Tx)\geq0xT(AAT)x=(ATx)T(ATx)≥0),而因为之前我们证明了AAA列满秩时ATAA^TAATA可逆,因此ATAA^TAATA必定没有零特征值,所以AATAA^TAAT是正定的。这样,F(x)F(x)F(x)的极值点就一定是极小值点(即严格凸优化问题)。下面无非就是求导的问题:
∂F(x)∂x=(ATA+(ATA)T)x−2(ATb)=2(ATA)x−2(ATb)\frac{\partial F(x)}{\partial x}=(A^TA+(A^TA)^T)x-2(A^Tb)\\= 2(A^TA)x-2(A^Tb) ∂x∂F(x)=(ATA+(ATA)T)x−2(ATb)=2(ATA)x−2(ATb)
令其等于0,求得
x∗=(ATA)−1ATbx^*=(A^TA)^{-1}A^Tbx∗=(ATA)−1ATb
这就是F(x)F(x)F(x)的极小值点即最小二乘解。
不清楚矩阵函数求导的同志可以看一下如下的公式:
dA(x)B(x)dx=dA(x)xB(x)+A(x)dB(x)dxdxTAxdx=(A+AT)xdCTxdx=dxTCdx=C\begin{aligned} &\frac{dA(x)B(x)}{dx}=\frac{dA(x)}{x}B(x)+A(x)\frac{dB(x)}{dx}\\ &\frac{dx^TAx}{dx}=(A+A^T)x\\ &\frac{dC^Tx}{dx}=\frac{dx^TC}{dx}=C \end{aligned} dxdA(x)B(x)=xdA(x)B(x)+A(x)dxdB(x)dxdxTAx=(A+AT)xdxdCTx=dxdxTC=C