奇异值分解(Singular Value Decomposition, SVD)——快速教程

原文作者:Dr. Edel Garcia

原文地址:https://fenix.tecnico.ulisboa.pt/downloadFile/3779576344458/singular-value-decomposition-fast-track-tutorial.pdf

  • 摘要:本快速教程提供了使用奇异值分解(SVD)算法分解矩阵的说明。教程涵盖奇异值、左右特征向量以及计算矩阵的full SVD的快捷方式。
  • 关键词:奇异值分解,SVD,奇异值,特征向量,full SVD,矩阵分解
  • 问题:计算下列矩阵的full SVD:

A=\begin{bmatrix} 4 &0 \\ 3 &-5 \end{bmatrix}

解释一下full SVD

假设A是一个M*N的矩阵,那么得到的U是一个M*M的方阵(里面的向量是正交的,U里面的向量称为左奇异向量),\Sigma是一个M*N的矩阵(除了对角线的元素都是0,对角线上的元素称为奇异值),V^{\ast }(V的转置)是一个N*N的矩阵(里面的向量也是正交的,V里面的向量称为右奇异向量)。

1.将A的转置和A做矩阵乘法,得到N*N的一个方阵A^{T}A,进行特征分解,得到的特征值和特征向量满足下式:

(A^{T}A)v_{i}=\lambda _{i}v_{i}

得到矩阵A^{T}A的n个特征值和对应的n个特征向量v,将所有A^{T}A的特征向量张成一个N*N的矩阵V,就是SVD公式里面的V。一般将V中的每个特征向量叫做A的右奇异向量,其可以用来降低数据的维度。

2.将A和A的转置做矩阵乘法,得到M*M的一个方阵AA^{T},进行特征分解,得到的特征值和特征向量满足下式:

(AA^{T})u_{i}=\lambda _{i}u_{i}

得到矩阵AA^{T}的m个特征值和对应的m个特征向量u,将所有AA^{T}的特征向量张成一个M*M的矩阵U,就是SVD公式里面的U。一般将U中的每个特征向量叫做A的左奇异向量,其可以用来降低数据的数量级。

full SVD的full在于 U 和 V 都是方阵,而 U 中被虚线框出的部分的重要性都为0,对 A 其实是没有贡献的。

而Reduced SVD就是把多余的bottom去掉,对应的 V 仍然是方阵。

  • 解决步骤:

1.计算转置矩阵A^{T}A^{T}A

A^{T}=\begin{bmatrix} 4 &3 \\ 0 &-5 \end{bmatrix}

A^{T}A=\begin{bmatrix} 4 &3 \\ 0 &-5 \end{bmatrix}\begin{bmatrix} 4 &0 \\ 3 &-5 \end{bmatrix}=\begin{bmatrix} 25 &-15 \\ -15 &25 \end{bmatrix}

2.确定A^{T}A的特征值并以绝对值按降序排序,对其开方得到A的奇异值。

A^{T}A-cI=\begin{bmatrix} 25-c &-15 \\ -15 &25-c \end{bmatrix}

\left | A^{T}A-cI \right |=(25-c)(25-c)-(-15)(-15)=0

特征方程\rightarrow c^{2}-50c+400=0

二次方程得到两个值,按降序排序\rightarrow \left | 40 \right |> \left | 10 \right |

特征值\rightarrow c_{1}=40\; \; c2=10

奇异值\rightarrow s_{1}=\sqrt{40}=6.3245\; \; > \; \; s_{2}=\sqrt{10}=3.1622

3.通过沿对角线降序放置奇异值来构造对角矩阵S,计算它的逆矩阵S^{-1}

S=\begin{bmatrix} 6.3245 &0 \\ 0 &3.1622 \end{bmatrix}

S^{-1}=\begin{bmatrix} 0.1581 &0 \\ 0 &0.3162 \end{bmatrix}

4.使用步骤2中的有序特征值计算A^{T}A的特征向量,将这些特征向量沿列放置得到V,计算它的转置矩阵V^{T}

c_{1}=40对应的特征向量为x_{1}=\begin{bmatrix} 0.7071\\ -0.7071 \end{bmatrix}

c_{2}=10对应的特征向量为x_{2}=\begin{bmatrix} 0.7071\\ 0.7071 \end{bmatrix}

V=\begin{bmatrix} x_{1} &x_{2} \end{bmatrix}=\begin{bmatrix} 0.7071 &0.7071 \\ -0.7071 &0.7071 \end{bmatrix}

V^{T}=\begin{bmatrix} 0.7071 &-0.7071 \\ 0.7071 &0.7071 \end{bmatrix}

5.计算U=AVS^{-1},为了完成证明,利用A=USV^{T}计算full SVD。

U=AVS^{-1}=\begin{bmatrix} 4 &0 \\ 3 &-5 \end{bmatrix}\begin{bmatrix} 0.7071 &0.7071 \\ -0.7071 &0.7071 \end{bmatrix}\begin{bmatrix} 0.1581 &0 \\ 0 &0.3162 \end{bmatrix}=\begin{bmatrix} 0.4472 &0.8944 \\ 0.8944 &-0.4472 \end{bmatrix}

A=USV^{T}=\begin{bmatrix} 0.4472 &0.8944 \\ 0.8944 &-0.4472 \end{bmatrix}\begin{bmatrix} 6.3245 &0 \\ 0 &3.1622 \end{bmatrix}\begin{bmatrix} 0.7071 &-0.7071 \\ 0.7071 &0.7071 \end{bmatrix}

=\begin{bmatrix} 3.9998 &0 \\ 2.9999 &-4.9997 \end{bmatrix}=\begin{bmatrix} 4 &0 \\ 3 &-5 \end{bmatrix}

通过检验V和U的特征向量,可以看出它们的正交性。这可以通过计算列向量之间的点积来证明,所有点积都等于零。或者,我们可以绘制下图,并看到它们都是正交的。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值