伪逆矩阵与奇异值分解(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)