偽逆矩陣與奇異值分解(SVD)
偽逆矩陣
矩陣的逆
定義:設\(A\)是\(n\)階方陣,如果存在\(n\)階方陣\(B\),使得\(AB=BA=E\),則稱矩陣\(A\)為可逆矩陣,矩陣\(B\)成為\(A\)的逆矩陣,記作\(A^{-1}=B\)。
注意:如果\(n\)階矩陣\(A\)的行列式\(\left | A \right |=0\),則稱\(A\)為奇異矩陣,奇異矩陣沒有逆矩陣。
矩陣逆的求法:
- 伴隨矩陣。
- 初等行列式變換。
偽逆矩陣
通過上面的定義可以知道,奇異矩陣和非方陣是沒有逆矩陣的,但是他們可以有偽逆矩陣。
定義:對於一個矩陣A,如果存在一個矩陣B滿足下面四個式子,則稱B為廣義逆。
- \(ABA=A\)
- \(BAB=B\)
- \((AB)^{T}=AB\)
- \((BA)^{T}=BA\)
偽逆表示:
- 如果矩陣\(C\)的逆不為0,則\(C\)可以滿秩分解,\(C=AB\),那么\(C^+=A^T(AA^T)^{-1}(B^TB)^{-1}B^T\)
- 僅當\(m\ge n\)時,列滿秩,矩陣\(A_{mn}\)有左逆矩陣,\(A^L=(A^TA)^{-1}A^T\)
- 當\(n\ge m\)時,行滿秩,矩陣\(A_{mn}\)有右逆矩陣,\(A^R=A^T(A^TA)^{-1}\)
代碼
最小二乘法中,\(Ax=b\),最小二乘法解 \(\widehat{x} =A^+b\)
import numpy as np
pinv=np.linalg.pinv(A) #求矩陣的偽逆
奇異值分解(SVD)
方陣特征值
定義:設\(A\)是\(n\)階矩陣,如果數\(\lambda\)和\(n\)維非零列向量\(X\)使得關系式
成立,那么數\(\lambda\)就是方陣\(A\)的特征值。
由相似矩陣的定義可以知道,
其中\(\sum\)為對角矩陣,並且特征值都在對角線上。
當P為正交矩陣的時候,即\(PP^T=E\),滿足:
注意:以上就是特征分解表達式,但是A必須是方陣。
當A不是方陣的時候,就需要使用奇異值分解。
奇異值分解
\(SVD\)也是對矩陣進行分解,但是和特征分解不同,\(SVD\)並不要求要分解的矩陣為方陣。假設我們的矩陣\(A\)是一個\(m×n\)的矩陣,那么我們定義矩陣\(A\)的\(SVD\)為:
其中,\(U\)是\(m×m\)的方陣,\(\sum\)是\(m×n\)的矩陣,\(V\)是\(n×n\)的方陣,並且\(U\)和\(V\)是正交矩陣。
\(A^TA\)是一個\(n×n\)的方陣,對它進行特征值分解,滿足:
\(A^TA\)的n個特征值對應\(V\)的\(n\)個特征向量,將所有特征向量合並成一個\(n×n\)的方陣V。
同理,\(AA^T\)是一個\(m×m\)的方陣,對它進行特征值分解,滿足:
\(AA^T\)的m個特征值對應U的m個特征向量,將所有特征向量合並成一個m*m的方陣U。
證明:
其中,\(UU^T=E,\sum={\textstyle \sum_{}^{T}}\),由此得出上面的對應關系,並且還可以得出來特征值矩陣等於奇異值矩陣的平方,即:
代碼
import numpy as np
U,s,V=np.linalg.svd(A)