本文从理论基础的角度梳理对SVD的理解,不涉及SVD的实现算法。若有不准确的地方,请指正。转载请注明出处。
下面是两篇介绍SVD基础的非常不错的文章,本文的一些思路参考了它们:
http://www.cnblogs.com/LeftNotEasy/archive/2011/01/19/svd-and-applications.html
http://www.ams.org/samplings/feature-column/fcarc-svd
一、方矩阵的特征值分解
对于一个 n 阶非奇异方矩阵 A ,存在 n 个特征值 (λ1,λ2,…,λn) 。如果这些特征值互不相等,则存在 n 个线性无关的特征向量 (p1,p2,…,pn) ,其对应关系为:
把所有这些特征向量组成一个 n 阶矩阵 P ,所有这些特征值组成 n 阶对角矩阵 Λ ,即:
则这 n 个特征方程 (???) 可以表示为:
因为 n 个特征向量 pi 是线性无关的,则矩阵 P 可逆。由上面的方程即可得到:
这就是非奇异矩阵的特征值分解。也许写成分量的形式,更能体现出“分解”的含义,我们把 P 的逆矩阵写成行向量的形式 P−1=(q1,q2,…,qn)T ,行向量 qi 是矩阵 P−1 的低 i 行。这样,上面的方程可以写为:
这样,矩阵 A 被分解成了向量 pi 与 qTi 的乘积的和,对应的特征值 λi 是每一项的系数。对于矩阵 A 是对称矩阵的情况,其特征向量是正交的,所以 P 是正交矩阵,有 P−1=PT ,这样上式中的 qi=pi 。所以对称矩阵可以由它的特征向量来分解。
二、奇异值分解
非方阵没有特征值和特征向量,不存在上面那样的特征值分解,但是可以做类似的奇异值分解。
一个 m×n 阶矩阵 A 可以看做对空间的一种线性变换, Aa=b ,把一个 n 维空间中的向量 A 变换成M维空间的向量 b 。从变换前后的两个空间的正交基矢可以方便看出变换的效果。变换A在某些方向上的变换最强,在另一些方向上的变换最弱,我们选择这样的方向作为基矢。后面可以看到,这些基矢正是 ATA 的特征向量。
1. 奇异值与奇异向量
矩阵 ATA 是 n 阶的,记其 n 个特征值(假设不相同)为 (σ21,σ22,…,σ2n) 。因为 ATA 是对称矩阵,假设这些特征值各不相同,则存在 n 个互相正交的特征向量 (v1,v2,…,vn) ,
我们将这些特征向量取为单位长度,则它们可以当做原 n 维空间中的一组正交基,满足下面的正交归一关系:
将它们经过矩阵 A 变换后在 m 维像空间中对应的向量记为 (u1,u2,…,un) ,即
其中已经把 n 个向量 ui 都取为单位长度。这样, λi 表示向量 vi 变换后的长度, ui 表示变换后的方向。下面证明向量 ui 的正交特性和 λi=σi :
当 i≠j 时,上式等于0。当 i=j 时,因为 ui 是单位向量,所以上式等于1。这样我们同时得到:
可以看出,向量 ui 与 vi 具有相同的正交特性。
在方程 (???) 的两端同左乘 AT ,利用方程 (???) 容易得到下面的关系:
再在这个方程两端左乘 A ,结合方程 (???) 得到:
可以看出,矩阵 A 和 AT 是两个互逆的变换。在这两种变换的作用下,向量 vi 与 ui 互为像向量。我们把这几个方程写到一起:
按照定义, vi 是矩阵 A 的奇异向量, σi 是对应的奇异值,表征这个奇异向量经过矩阵 A 变换后的长度。对应的, ui 是矩阵 AT 的奇异向量,是对应的奇异值也是 σi 。
2. 奇异值分解
根据前面的讨论, m×n 矩阵 A 的作用空间是 n 维的,向量组 (v1,v2,…,vn) 可以作为这个空间的正交归一基底。这个空间中的任意向量 f 可以用这组基底展开:
结合上面的结果 (???) ,矩阵 A 对向量 f 的作用可以写为:
因为向量 f 是任意的,从上面的结果可以得到
这就是矩阵的奇异值分解,把 A 分解成 n 个 uivTi 的和,每一项的系数是对应的奇异值 σi 。这个结果可以代入方程 (6) 验证。
从这个分解可以看出,那些奇异值较小的项,对矩阵 A 的贡献较小,在一定精度上可以省略掉。我们把 n 个奇异值 σi 按降序排列,在上面的分解方程中只保留前 r 个:
我们定义 m×r 阶矩阵 U 、 n×r 阶矩阵 V 和 r 阶对角矩阵 Σ :
这样矩阵 A 就可以写为三个矩阵相乘:
SVD算法的任务,就是计算出奇异值和两个矩阵 U 、 VT 。
本文从理论基础的角度梳理了奇异值分解(SVD)的概念、特征值分解、矩阵的奇异值分解等内容,详细解释了如何通过特征向量和奇异值进行矩阵分解,并探讨了其在数据压缩、图像处理、推荐系统等领域的应用。
9852

被折叠的 条评论
为什么被折叠?



