#

SVD奇异分解


SVD奇异分解

SVD也是对矩阵进行分解,但是和特征分解不同,SVD并不要求要分解的矩阵为方阵。假设我们的矩阵A是一个m×n的矩阵,那么我们定义矩阵A的SVD为:

A=UΣVTA=U\varSigma V^T

其中UU是一个m×mm\times m的矩阵,Σ\varSigma是一个m×nm\times n除了主对角线上的元素以外全为0,主对角线上的每个元素都称为奇异值VV是一个n×nn\times n的矩阵。UUVV都是酉矩阵,即满足

UTU=I,VTV=IU^TU=I, \quad V^T V =I

图解.png

SVD分解步骤:

  • step1:求VV

ATAA^TA(大小为n×nn\times n)的特征值和特征向量:

(ATA)vi=λivi(A^TA)v_i=\lambda_i v_i

所有特征向量组成矩阵VV
VV中的每个特征向量叫做AA的右奇异向量。

  • step2:求UU

AATAA^T(大小为m×mm\times m)的特征值和特征向量:

(AAT)ui=λiui(AA^T)u_i=\lambda_i u_i

所有特征向量组成矩阵UU
UU中的每个特征向量叫做AA的左奇异向量。

  • step3:求Σ\varSigma

A=UΣVTAV=UΣVTVAV=UΣAvi=σiuiσi=Avi/uiA=U \Sigma V^{T} \Rightarrow A V=U \Sigma V^{T} V \Rightarrow A V=U \Sigma \Rightarrow A v_{i}=\sigma_{i} u_{i} \Rightarrow \sigma_{i}=A v_{i} / u_{i}

进一步我们还可以看出我们的特征值矩阵等于奇异值矩阵的平方,也就是说特征值和奇异值满足如下关系:

A=UΣVTAT=VΣUTATA=VΣUTUΣVT=VΣ2VTA=U \Sigma V^{T} \Rightarrow A^{T}=V \Sigma U^{T} \Rightarrow A^{T} A=V \Sigma U^{T} U \Sigma V^{T}=V \Sigma^{2} V^{T}

由此可以看出

σi=λi\sigma_{i}=\sqrt{\lambda_{i}}

可从此计算奇异值

举例

A=(011110)\mathbf{A}=\left(\begin{array}{ll} 0 & 1 \\ 1 & 1 \\ 1 & 0 \end{array}\right)

首先求出ATAA^TAAATAA^T

ATA=(011110)(011110)=(2112)AAT=(011110)(011110)=(110121011)\begin{gathered} \mathbf{A}^{\mathbf{T}} \mathbf{A}=\left(\begin{array}{lll} 0 & 1 & 1 \\ 1 & 1 & 0 \end{array}\right)\left(\begin{array}{ll} 0 & 1 \\ 1 & 1 \\ 1 & 0 \end{array}\right)=\left(\begin{array}{ll} 2 & 1 \\ 1 & 2 \end{array}\right) \\ \mathbf{A} \mathbf{A}^{\mathbf{T}}=\left(\begin{array}{ll} 0 & 1 \\ 1 & 1 \\ 1 & 0 \end{array}\right)\left(\begin{array}{lll} 0 & 1 & 1 \\ 1 & 1 & 0 \end{array}\right)=\left(\begin{array}{lll} 1 & 1 & 0 \\ 1 & 2 & 1 \\ 0 & 1 & 1 \end{array}\right) \end{gathered}

进而求出ATAA^TA的特征值和特征向量:

λ1=3;v1=(1/21/2);λ2=1;v2=(1/21/2)\lambda_{1}=3 ; v_{1}=\left(\begin{array}{c} 1 / \sqrt{2} \\ 1 / \sqrt{2} \end{array}\right) ; \lambda_{2}=1 ; v_{2}=\left(\begin{array}{c} -1 / \sqrt{2} \\ 1 / \sqrt{2} \end{array}\right)

接着求出AATAA^T的特征值和特征向量:

λ1=3;u1=(1/62/61/6);λ2=1;u2=(1/201/2);λ3=0;u3=(1/31/31/3)\lambda_{1}=3 ; u_{1}=\left(\begin{array}{c} 1 / \sqrt{6} \\ 2 / \sqrt{6} \\ 1 / \sqrt{6} \end{array}\right) ; \lambda_{2}=1 ; u_{2}=\left(\begin{array}{c} 1 / \sqrt{2} \\ 0 \\ -1 / \sqrt{2} \end{array}\right) ; \lambda_{3}=0 ; u_{3}=\left(\begin{array}{c} 1 / \sqrt{3} \\ -1 / \sqrt{3} \\ 1 / \sqrt{3} \end{array}\right)

利用Avi=σiui,i=1,2Av_i=\sigma_i u_i , i=1,2求奇异值:

(011110)(1/21/2)=σ1(1/62/61/6)σ1=3(011110)(1/21/2)=σ2(1/201/2)σ2=1\begin{aligned} &\left(\begin{array}{ll} 0 & 1 \\ 1 & 1 \\ 1 & 0 \end{array}\right)\left(\begin{array}{c} 1 / \sqrt{2} \\ 1 / \sqrt{2} \end{array}\right)=\sigma_{1}\left(\begin{array}{c} 1 / \sqrt{6} \\ 2 / \sqrt{6} \\ 1 / \sqrt{6} \end{array}\right) \Rightarrow \sigma_{1}=\sqrt{3} \\ &\left(\begin{array}{ll} 0 & 1 \\ 1 & 1 \\ 1 & 0 \end{array}\right)\left(\begin{array}{c} -1 / \sqrt{2} \\ 1 / \sqrt{2} \end{array}\right)=\sigma_{2}\left(\begin{array}{c} 1 / \sqrt{2} \\ 0 \\ -1 / \sqrt{2} \end{array}\right) \Rightarrow \sigma_{2}=1 \end{aligned}

也可以用σi=λi\sigma_i=\sqrt{\lambda_i}直接求出奇异值为3\sqrt{3}和1,最终得到A的奇异值分解为:

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{array}{ccc} 1 / \sqrt{6} & 1 / \sqrt{2} & 1 / \sqrt{3} \\ 2 / \sqrt{6} & 0 & -1 / \sqrt{3} \\ 1 / \sqrt{6} & -1 / \sqrt{2} & 1 / \sqrt{3} \end{array}\right)\left(\begin{array}{cc} \sqrt{3} & 0 \\ 0 & 1 \\ 0 & 0 \end{array}\right)\left(\begin{array}{cc} 1 / \sqrt{2} & 1 / \sqrt{2} \\ -1 / \sqrt{2} & 1 / \sqrt{2} \end{array}\right)

python和matlab都有内置的函数。


文章作者: 王胜鹏
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 王胜鹏 !
评论
 上一篇
正交与二次型 正交与二次型
正交与二次型 正交矩阵其实就是空间的旋转,先说结论: 椭圆的长短轴分别沿着矩阵A\boldsymbol{A}A的两个特征向量的方向,而两个与之对应的特征值分别是半长轴和半短轴的长度的平方的倒数。 拿我们最熟悉的椭圆方程举例: ax2+2bx
2021-08-30
下一篇 
PAT代替密码密码验证 PAT代替密码密码验证
PAT代替密码验证 2021年8月13日git终止密码验证提交程序,强制使用PAT验证方式,这是一件好事,减少密码泄露。 fatal: unable to access 'https://github.com/wsp666/wsp666.g
2021-08-14
  目录