线性代数

对称矩阵和矩阵的SVD分解

完美的对称矩阵

对称矩阵即矩阵的所有元素关于主对角线对称:

(1001)(1223)(11512π5π3)\begin{pmatrix} 1&0\\ 0&1 \end{pmatrix} \quad \begin{pmatrix} 1 & \sqrt{2}\\ \sqrt{2} & 3 \end{pmatrix} \quad \begin{pmatrix} 1 & -1 &\sqrt{5}\\ -1 & 2 &\pi\\ \sqrt{5} & \pi & 3 \end{pmatrix}

用数学表达对称矩阵:

A=ATA=A^T

为什么说对称矩阵是完美的?对称矩阵的特征值一定是实数(证略). 对称矩阵的多重特征值,其对应的特征空间的维度一定等于重数.对称矩阵的几何重数等于代数重数. 对称矩阵一定有n个线性无关的特征向量.

因此对称矩阵一定可以被对角化.

正交对角化

对称矩阵的所有不同的特征值对应的特征向量互相垂直.

假设矩阵A的两个特征向量v1,v2对应不同的特征值λ1,λ2\lambda_1,\lambda_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证明 \vec{v}_1.\vec{v}_2=0\\ (\lambda_1\vec{v}_1).\vec{v}_2=(\lambda_1 v_1)^Tv_2=(Av_1)^Tv_2\\ =v_1^TA^Tv_2\\ =v_1^TAv_2\\ =v_1^T\lambda_2v_2\\ =\lambda_2v_1^Tv_2=\lambda_2\vec{v}_1.\vec{v}_2=0\\ (\lambda_1-\lambda_2)(\vec{v}_1.\vec{v}_2)=0\\ \downarrow\\ (\vec{v}_1.\vec{v}_2)=0

对称矩阵一定可以被对角化:

A=PDP1A=PDP^{-1}

如果A是对称矩阵,

A=QDQ1A=QDQTA=QDQ^{-1}\\ A=QDQ^T

此时的Q是标准正交矩阵,这个式子就是把A进行了正交对角化.

正交对角化就是在对角化的基础上保证P是一个标准正交矩阵,写成字母Q.

如果A可以被正交对角化,则A一定是对称矩阵.

A=QDQTAT=(QDQT)T=QDTQT=QDQT=A得证A=QDQ^T\\ A^T=(QDQ^T)^T\\ =QD^TQ^T\\ =QDQ^T=A\\ 得证

因此:

A是对称矩阵    A可以被正交对角化A=QDQTA是对称矩阵 \iff A可以被正交对角化 A=QDQ^T

这个结论也叫做谱定理.

奇异值

前面讨论的特征值、特征向量、相似型、对角化、对称矩阵、正交对角化都是基于方阵的。 但实际处理的数据很多是非方阵,对于每一个非方阵来说,我们都可以找到一个对称矩阵和它对应.

如果A是一个m*n的矩阵,则ATAA^TA 是一个n*n 的方阵,且对称.

i行第j列元素:ATi行点乘Aj相当于Ai列点乘Ajj行第i列元素:ATj行点乘Ai相当于Aj列点乘Ai第i行第j列元素:A^T第i行点乘A第j列\\ 相当于A第i列点乘A第j列\\ 第j行第i列元素:A^T第j行点乘A第i列\\ 相当于A第j列点乘A第i列\\

因此ATAA^TA 是对称矩阵.

$A^TA $ 可以被正交对角化,拥有n个实数特征值λ1,..,λi\lambda_1,..,\lambda_i,n个互相垂直的标准特征向量v1,..,vi\vec{v}_1,..,\vec{v}_i.

下面式子:

Avi2=(Avi).(Avi)=(Avi)T.(Avi)=viT(ATAvi)=viT(λivi)=λiviTvi=λivi2=λi||A\vec{v}_i||^2=(A\vec{v}_i).(A\vec{v}_i)=(Av_i)^T.(Av_i)=v_i^T(A^TAv_i)\\ =v_i^T(\lambda_iv_i)\\ =\lambda_iv_i^Tv_i\\ =\lambda_i||\vec{v}_i||^2\\ =\lambda_i

这个式子说明每一个λi\lambda_i 都可以表示成一个上面向量模的平方,因此ATAA^TA 的特征值>=0 .将σi=λi\sigma_i=\sqrt{\lambda_i} 称为奇异值(Singular Value).

奇异值就是AviA\vec{v}_i 的长度.

{Avi}\{A\vec{v}_i\} 是A的列空间的一组正交基,λi0\lambda_i\ne0 .

证明正交性:

(Avi).(Avj)=(Avi)T(Avj)=viTATAvj=viT(ATAvj)=viT(λjvj)=λjviTvj=λj(vi.vj)=0(A\vec{v}_i).(A\vec{v}_j)=(A{v}_i)^T(A{v}_j)=v_i^TA^TAv_j\\ =v_i^T(A^TAv_j)=v_i^T(\lambda_jv_j)\\ =\lambda_jv_i^Tv_j\\ =\lambda_j(\vec{v}_i.\vec{v}_j)=0

证明{Avi}\{A\vec{v}_i\} 是A的列空间的一组基:

image-20251222015249654

如果A有r个不为零的奇异值,{Av1,Av2,...,Avr}\{A\vec{v}_1,A\vec{v}_2,...,A\vec{v}_r\} 是A的列空间的一组正交基. A的列空间维度为r,rank(A)=r.

{Av1σ1,Av2σ2,...,Avrσr}\{\frac{A\vec{v}_1}{\sigma_1},\frac{A\vec{v}_2}{\sigma_2},...,\frac{A\vec{v}_r}{\sigma_r}\} 是A的列空间的一组标准正交基.

通常把奇异值从大到小排序,把σi=0\sigma_i=0 的奇异值丢掉.

奇异值的SVD分解

矩阵的SVD分解-Singular Value Decomposition , 即矩阵的奇异值分解. 对任意形状的矩阵都适用.

A=UVTA=U\sum V^T

如果A是m*n的矩阵,U是m*m 的矩阵;\sum 是m*n 的矩阵(奇异值矩阵);V是n*n的矩阵.

V是AATAA^T 的特征向量矩阵进行标准化,U和V都是标准正交矩阵.

image-20251222020721843

证明:

AV=UviATA的标准特征向量AV=U\sum \quad \vec{v}_i是A^TA的标准特征向量

image-20251222021017438

具体流程:

  • 求解ATAA^TA 的特征值和特征向量
  • 非零特征值开根后(奇异值)得到m*n的\sum ,奇异值从大到小排序
  • 特征向量标准化后得到n*n的V
  • ui=Aviσi\vec{u}_i=\frac{A\vec{v}_i}{\sigma_i} 在经过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))

image-20251222021624616

SVD分解的应用

第一个应用是将矩阵A看作是一个变换. 如果A是一个m*n矩阵,A只能对n维向量做变换.

image-20251222022638372

列视角看待A,把矩阵A看成一片数据:

image-20251222023729360

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