程序员的自我修养之数学基础09:奇异值分解

本文介绍了奇异值分解(SVD)的概念,作为适用于任意矩阵的分解方法,它揭示了矩阵旋转、缩放和投影的效果。奇异值分解将矩阵分解为左奇异矩阵、右奇异矩阵和奇异值矩阵,其中奇异值按降序排列,常用于矩阵降维。SVD具有比例和旋转不变性,广泛应用于数字图像处理等领域。
摘要由CSDN通过智能技术生成

啊,终于看到了奇异值分解……To be honest,我写的大部分博文,就是因为看不懂这一块内容所以一步步往回看的……一把辛酸泪啊!

前一篇,我们讲到了特征值分解。我们知道,特征值分解,是为了给一个方阵(可对角化的矩阵)找一组特殊的基,也就是特征向量,在这组基下,这个矩阵所代表的线性变换只起到了“缩放”的效果。我们还讲到一种更为特殊的特征值分解,也就是当被分解的矩阵\bg_white \boldsymbol{A}是实对称矩阵(即\bg_white \bg_white \boldsymbol{A=A^T})时,\bg_white \boldsymbol{A}可以被分解为如下形式:

但是,特征值分解对矩阵的要求很高,那对于一般性的矩阵该怎么处理呢?这就用到了我们的“适用于任意矩阵”的奇异值分解(singular value decomposition, SVD)了。

我们知道,对于一个普通的矩阵,其所代表的线性变换,包含着“旋转”、“跳跃”、“闭着眼”,不不不,是“旋转”、“缩放”、“投影”等多重效果,但是单给出这个矩阵,我们大概率会傻眼,不知道它的作用到底是啥。那为了让我们更好的理解这个矩阵的作用,我们需要把它单独的功能独立的展示出来,这就是奇异值分解要做的工作了。

先看看奇异值分解的形式\boldsymbol{A=U\Sigma V^T}(是不是和实对称矩阵的特征值分解形式很像?)。

其中,\bg_white \boldsymbol{U}被称为左奇异矩阵\bg_white \boldsymbol{V}被称为右奇异矩阵,相应的,\bg_white \boldsymbol{U}中的列向量称为做左奇异向量,\bg_white \boldsymbol{V^T}中的列向量称为右奇异向量。\bg_white \boldsymbol{U}\bg_white \boldsymbol{V}均为单位正交阵,也就是说,\bg_white \boldsymbol{UU^T=I}\bg_white \boldsymbol{VV^T=I}\boldsymbol{\Sigma} 仅在主对角线上有值,被称为奇异值,其他元素均为0,可以理解为\begin{bmatrix} \Sigma & 0\\ 0& 0 \end{bmatrix}的形式。

为了更好的理解,我们可以看一下下面的图片。

我们说,特征值分解只针对方阵,那么对于一个m\times n的矩阵\bg_white \boldsymbol{A},我们可以通过左乘其转置矩阵\bg_white \boldsymbol{A^T},得到n\times n阶方阵\bg_white \boldsymbol{A^TA}。那么,我们就可以得到该矩阵的特征值 \lambda _i 和特征向量 \boldsymbol{\nu }_i,满足 \boldsymbol{(A^TA)\nu_i} =\lambda _i\boldsymbol{\nu_i} 。这里求得的\boldsymbol{\nu }_i就是刚刚提到的右奇异向量,也就是说,\bg_white \boldsymbol{V^T}\bg_white \boldsymbol{A^TA}特征向量的集合。

\sigma _i=\sqrt{\lambda _i} ,\boldsymbol{u_i} =\frac{1}{\sigma_i}\boldsymbol{A\nu_i},这里的 \sigma _i 就是上文中提到的奇异值,\boldsymbol{u_i} 就是相应的左奇异向量。不难证明,其实,左奇异向量是\bg_white \boldsymbol{AA^T}的特征向量,也就是说,\bg_white \boldsymbol{U}\bg_white \boldsymbol{AA^T}的特征向量的集合。

奇异值\sigma和特征值\lambda类似,在矩阵\boldsymbol{\Sigma}中也是由大到小排列,而且\sigma下降的非常快,在很多情况下,前10%甚至1%的奇异值比重就占到了所有奇异值之和的99%以上了。因此,我们可以提取前k个较大的奇异值来近似的描述矩阵,实现矩阵的“压缩”,也就是所谓的部分奇异值分解

\boldsymbol{A_{m\times n}\approx U_{m\times k}\Sigma _{k\times k} V^T_{k\times n}}

下面再点一点SVD的几个常用特性吧:

  • 奇异值的比例不变性:\alpha \boldsymbol{A}的奇异值是\bg_white \boldsymbol{A}的奇异值的\left | \alpha \right |倍;
  • 奇异值的旋转不变性:若\bg_white \boldsymbol{P}是正交矩阵且det \boldsymbol{P}=1,也就是说P是一个旋转矩阵,则\bg_white \boldsymbol{PA}的奇异值与\bg_white \boldsymbol{A}的奇异值相同。

奇异值的比例和旋转不变性在数字图像处理方面有很重要的应用(这也是我卡在这块的原因……暴风哭泣)。

好了,讲到这里,让我们再回头去看看之前我们想实现的目标——展示矩阵代表的线性变换功能。这一点是怎么实现的呢?

我们得到奇异值分解的结果\boldsymbol{A=U\Sigma V^T},从几何的角度去理解,也就是我们找到了\bg_white \boldsymbol{U}\bg_white \boldsymbol{V}这两组基,矩阵\bg_white \boldsymbol{A}的作用,就是将一个向量从\bg_white \boldsymbol{V}这组正交基代表的向量空间“旋转”\bg_white \boldsymbol{U}这组正交基代表的向量空间里来,并对每个方向进行了一定的“缩放”(由\boldsymbol{\Sigma}决定),缩放因子就是对应的奇异值。如果\bg_white \boldsymbol{V}的维度大于\bg_white \boldsymbol{U}的维度,则表示还进行了“投影”

也就是说,我们通过奇异值分解,将一个矩阵原本混在一起的三种作用效果分解了出来

说了这么多,怎么求奇异值呢。我们可以利用以下性质:

\boldsymbol{AA^T=U\Sigma V^TV \Sigma^T U^T=U\Sigma\Sigma^T U^T}

\boldsymbol{A^TA=V\Sigma^TU^TU \Sigma V^T=V\Sigma^T\Sigma V^T}

由于\bg_white \boldsymbol{AA^T}\bg_white \boldsymbol{A^TA}都是方阵,而且还是对称矩阵,因此可以对其做特征分解,得到的特征矩阵分别是我们要求的\bg_white \boldsymbol{U}\bg_white \boldsymbol{V}。得到的特征值所组成的矩阵就是\boldsymbol{\Sigma^T\Sigma}\boldsymbol{\Sigma\Sigma^T}。在这里需要说明一下,尽管 \boldsymbol{\Sigma^T\Sigma}(m\times m) 和 \boldsymbol{\Sigma\Sigma^T}(n\times n)维数不同,但它们在主对角线的奇异值是相等的。根据定义对特征值进行开方即可得到所有的奇异值。

我自己也做了几个奇异值分解的例子,有兴趣的可以看一下,bye~

参考:

https://blog.csdn.net/MyArrow/article/details/53780972

https://www.cnblogs.com/endlesscoding/p/10033527.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值