线性代数
对称矩阵和矩阵的SVD分解
完美的对称矩阵
对称矩阵即矩阵的所有元素关于主对角线对称:
(1001)(1223)1−15−12π5π3
用数学表达对称矩阵:
A=AT
为什么说对称矩阵是完美的?对称矩阵的特征值一定是实数(证略). 对称矩阵的多重特征值,其对应的特征空间的维度一定等于重数.对称矩阵的几何重数等于代数重数. 对称矩阵一定有n个线性无关的特征向量.
因此对称矩阵一定可以被对角化.
正交对角化
对称矩阵的所有不同的特征值对应的特征向量互相垂直.
假设矩阵A的两个特征向量v1,v2对应不同的特征值λ1,λ2
证明v1.v2=0(λ1v1).v2=(λ1v1)Tv2=(Av1)Tv2=v1TATv2=v1TAv2=v1Tλ2v2=λ2v1Tv2=λ2v1.v2=0(λ1−λ2)(v1.v2)=0↓(v1.v2)=0
对称矩阵一定可以被对角化:
A=PDP−1
如果A是对称矩阵,
A=QDQ−1A=QDQT
此时的Q是标准正交矩阵,这个式子就是把A进行了正交对角化.
正交对角化就是在对角化的基础上保证P是一个标准正交矩阵,写成字母Q.
如果A可以被正交对角化,则A一定是对称矩阵.
A=QDQTAT=(QDQT)T=QDTQT=QDQT=A得证
因此:
A是对称矩阵⟺A可以被正交对角化A=QDQT
这个结论也叫做谱定理.
奇异值
前面讨论的特征值、特征向量、相似型、对角化、对称矩阵、正交对角化都是基于方阵的。 但实际处理的数据很多是非方阵,对于每一个非方阵来说,我们都可以找到一个对称矩阵和它对应.
如果A是一个m*n的矩阵,则ATA 是一个n*n 的方阵,且对称.
第i行第j列元素:AT第i行点乘A第j列相当于A第i列点乘A第j列第j行第i列元素:AT第j行点乘A第i列相当于A第j列点乘A第i列
因此ATA 是对称矩阵.
$A^TA $ 可以被正交对角化,拥有n个实数特征值λ1,..,λi,n个互相垂直的标准特征向量v1,..,vi.
下面式子:
∣∣Avi∣∣2=(Avi).(Avi)=(Avi)T.(Avi)=viT(ATAvi)=viT(λivi)=λiviTvi=λi∣∣vi∣∣2=λi
这个式子说明每一个λi 都可以表示成一个上面向量模的平方,因此ATA 的特征值>=0 .将σi=λi 称为奇异值(Singular Value).
奇异值就是Avi 的长度.
{Avi} 是A的列空间的一组正交基,λi=0 .
证明正交性:
(Avi).(Avj)=(Avi)T(Avj)=viTATAvj=viT(ATAvj)=viT(λjvj)=λjviTvj=λj(vi.vj)=0
证明{Avi} 是A的列空间的一组基:
如果A有r个不为零的奇异值,{Av1,Av2,...,Avr} 是A的列空间的一组正交基. A的列空间维度为r,rank(A)=r.
{σ1Av1,σ2Av2,...,σrAvr} 是A的列空间的一组标准正交基.
通常把奇异值从大到小排序,把σi=0 的奇异值丢掉.
奇异值的SVD分解
矩阵的SVD分解-Singular Value Decomposition , 即矩阵的奇异值分解. 对任意形状的矩阵都适用.
A=U∑VT
如果A是m*n的矩阵,U是m*m 的矩阵;∑ 是m*n 的矩阵(奇异值矩阵);V是n*n的矩阵.
V是AAT 的特征向量矩阵进行标准化,U和V都是标准正交矩阵.

证明:
AV=U∑vi是ATA的标准特征向量
具体流程:
- 求解ATA 的特征值和特征向量
- 非零特征值开根后(奇异值)得到m*n的∑ ,奇异值从大到小排序
- 特征向量标准化后得到n*n的V
- ui=σiAvi 在经过Gram-Schmidt扩展得到m*m的U
SVD代码示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| import numpy as np from scipy.linalg import svd
if __name__ == "__main__":
A = np.array([[1, 2], [3, 4], [5, 6]]) U, s, VT = svd(A) print(U) print(s) print(VT) print()
Sigma = np.zeros(A.shape) for i in range(len(s)): Sigma[i][i] = s[i] print(Sigma) print(U.dot(Sigma).dot(VT))
|

SVD分解的应用
第一个应用是将矩阵A看作是一个变换. 如果A是一个m*n矩阵,A只能对n维向量做变换.
列视角看待A,把矩阵A看成一片数据:

可以用来压缩、去噪、降维.