啊,终于看到了奇异值分解……To be honest,我写的大部分博文,就是因为看不懂这一块内容所以一步步往回看的……一把辛酸泪啊!
前一篇,我们讲到了特征值分解。我们知道,特征值分解,是为了给一个方阵(可对角化的矩阵)找一组特殊的基,也就是特征向量,在这组基下,这个矩阵所代表的线性变换只起到了“缩放”的效果。我们还讲到一种更为特殊的特征值分解,也就是当被分解的矩阵是实对称矩阵(即)时,可以被分解为如下形式:
但是,特征值分解对矩阵的要求很高,那对于一般性的矩阵该怎么处理呢?这就用到了我们的“适用于任意矩阵”的奇异值分解(singular value decomposition, SVD)了。
我们知道,对于一个普通的矩阵,其所代表的线性变换,包含着“旋转”、“跳跃”、“闭着眼”,不不不,是“旋转”、“缩放”、“投影”等多重效果,但是单给出这个矩阵,我们大概率会傻眼,不知道它的作用到底是啥。那为了让我们更好的理解这个矩阵的作用,我们需要把它单独的功能独立的展示出来,这就是奇异值分解要做的工作了。
先看看奇异值分解的形式:(是不是和实对称矩阵的特征值分解形式很像?)。
其中,被称为左奇异矩阵,被称为右奇异矩阵,相应的,中的列向量称为做左奇异向量,中的列向量称为右奇异向量。和均为单位正交阵,也就是说,,。 仅在主对角线上有值,被称为奇异值,其他元素均为0,可以理解为的形式。
为了更好的理解,我们可以看一下下面的图片。
我们说,特征值分解只针对方阵,那么对于一个的矩阵,我们可以通过左乘其转置矩阵,得到阶方阵。那么,我们就可以得到该矩阵的特征值 和特征向量 ,满足 。这里求得的就是刚刚提到的右奇异向量,也就是说,是特征向量的集合。
令,这里的 就是上文中提到的奇异值, 就是相应的左奇异向量。不难证明,其实,左奇异向量是的特征向量,也就是说,是的特征向量的集合。
奇异值和特征值类似,在矩阵中也是由大到小排列,而且下降的非常快,在很多情况下,前10%甚至1%的奇异值比重就占到了所有奇异值之和的99%以上了。因此,我们可以提取前k个较大的奇异值来近似的描述矩阵,实现矩阵的“压缩”,也就是所谓的部分奇异值分解:
下面再点一点SVD的几个常用特性吧:
- 奇异值的比例不变性:的奇异值是的奇异值的倍;
- 奇异值的旋转不变性:若是正交矩阵且,也就是说P是一个旋转矩阵,则的奇异值与的奇异值相同。
奇异值的比例和旋转不变性在数字图像处理方面有很重要的应用(这也是我卡在这块的原因……暴风哭泣)。
好了,讲到这里,让我们再回头去看看之前我们想实现的目标——展示矩阵代表的线性变换功能。这一点是怎么实现的呢?
我们得到奇异值分解的结果,从几何的角度去理解,也就是我们找到了和这两组基,矩阵的作用,就是将一个向量从这组正交基代表的向量空间“旋转”到这组正交基代表的向量空间里来,并对每个方向进行了一定的“缩放”(由决定),缩放因子就是对应的奇异值。如果的维度大于的维度,则表示还进行了“投影”。
也就是说,我们通过奇异值分解,将一个矩阵原本混在一起的三种作用效果分解了出来。
说了这么多,怎么求奇异值呢。我们可以利用以下性质:
由于和都是方阵,而且还是对称矩阵,因此可以对其做特征分解,得到的特征矩阵分别是我们要求的和。得到的特征值所组成的矩阵就是或。在这里需要说明一下,尽管 和 维数不同,但它们在主对角线的奇异值是相等的。根据定义对特征值进行开方即可得到所有的奇异值。
我自己也做了几个奇异值分解的例子,有兴趣的可以看一下,bye~
参考: