矩阵分解、奇异值分解(SVD)

1.特征值

  1. 特征向量Ax=λxAx=\lambda x的几何意义:向量x通过矩阵A变换,只进行缩放,而不改变向量方向,缩放倍数即特征值。
  2. 对于n阶方阵,一定有n个特征值(包括复数),但非零特征值个数等于矩阵的秩。

2.方阵的分解

根据Ax=λxAx=\lambda x, 对于n阶方阵:A=UΣU1A = U\Sigma U^{-1} 其中U为n个特征向量构成的矩阵,Σ\Sigma为特征值构成的对角阵。把U的n个特征向量标准化,满足U1=UTU^{-1}=U^T,得到A=UΣUTA = U\Sigma ' U^{T}

3. 奇异值分解

当A不是方阵时,需要奇异值分解了(Singular Value Decompasition, SVD), 分解得到A=UΣVTA=U\Sigma V^T, 其中U,V分别为m,n阶方阵,Σ\Sigma为m x n维矩阵,主对角线上非零元素为奇异值。分解过程如下:

对于矩阵A=(011110)A = \left(\begin{matrix}0&1\\ 1&1\\1&0\end{matrix} \right)

  1. 求出AATAA^TATAA^TA
    AAT=(2112)AA^T = \left(\begin{matrix}2&1\\ 1&2\end{matrix} \right)AAT=(110121011)AA^T = \left(\begin{matrix}1&1&0\\ 1&2&1\\0&1&1\end{matrix} \right)
  2. 对两者分别求特征值与特征向量,使得ATAvi=λiviA^TAv_i=\lambda_i v_i AATui=λiuiAA^Tu_i=\lambda_i u_i得到:λi=3,λ2=1,v1=(1/21/2)T,v2=(1/21/2)T\lambda_i=3,\lambda_2=1,v_1=(1/\sqrt2 1/\sqrt2)^T, v_2=(-1/\sqrt2 1/\sqrt2)^T u1=(1/6,2/6,1/6)T,u2=(1/2,0,1/2)Tu_1=(1/\sqrt6,2/\sqrt6,1/\sqrt6)^T, u_2=(1/\sqrt2,0,-1/\sqrt2)^T λ3=0,u3=(1/3,1/3,1/3)T\lambda_3=0, u_3=(1/\sqrt3,-1/\sqrt3,1/\sqrt3)^T
  3. 利用Avi=σiuiAv_i=\sigma_iu_i求奇异值, σ1=3,σ2=1\sigma_1=\sqrt3, \sigma_2=1.
  4. 得到分解结果:
    A=UΣVT=(1/61/21/32/601/31/61/21/3)(300100)(1/21/21/21/2)A=U\Sigma V^T= \left(\begin{matrix} 1/\sqrt6 & 1/\sqrt2 & 1/\sqrt3 \\ 2/\sqrt6 & 0 & -1/\sqrt3 \\ 1/\sqrt6 & -1/\sqrt2 & 1/\sqrt3 \end{matrix} \right)\left(\begin{matrix} \sqrt3 & 0\\ 0& 1 \\ 0 & 0 \end{matrix} \right)\left(\begin{matrix} 1/\sqrt2 & 1/\sqrt2\\ -1/\sqrt2 & 1/\sqrt2 \end{matrix} \right)

4.奇异值分解的作用:降维

Python中奇异值分解:

U,sigma,VT=linalg.svd(data)

分解后,得到sigma为奇异值从大到小排列的向量,通过su(sigma[:k])2sum(sigma)2\frac{su(sigma[:k])^2}{sum(sigma)^2}计算奇异值的能量占比,一般超过80%则表明保留了较多信息,可以用前k个分量还原出原矩阵的大部分信息,从而将原矩阵降维到m x k维。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章