svd自我学习
svd(singular value decomposition) 奇异值分解 2015-05-17 16:28:50
图和部分内容来自:http://blog.csdn.net/wangzhiqing3/article/details/7446444 和 http://blog.chinaunix.net/uid-20761674-id-4040274.html 和 http://www.cnblogs.com/LeftNotEasy/archive/2011/01/19/svd-and-applications.html[图(1) (2) (3) (4) (5) (6)]
奇异值分解(以下皆以svd代表)有很多前人的帖子,看过许多,但经常忘记,因此自己写一篇帖子,加深记忆。而且自己写的东西,将来翻看也更容易些。
SVD是矩阵的一种求解方法,区别于特征值分解只能分解方阵,SVD可以分解任意的矩阵。SVD可以用来求解PCA(主成分分析)和LSI等具体问题。
- (1)特征值分解
- (2)奇异值分解
(1)特征值分解
如果说一个向量v是方阵A的特征向量,将一定可以表示成下面的形式:
Av = λv
这个时候, λ就被称为特征向量v对应的特征值,一个矩阵的一组特征向量是一组正交向量。特征值分解是如下:
A=Q∑Q-1
其中Q是这个矩阵A的特征向量组成的矩阵,∑对角线上的每一个值是一个特征值,它是对角阵。
线性代数或者矩阵分解中,矩阵其实可以看作一个线性变换,一个矩阵乘以一个向量后,会形成新的向量,新的向量就是原向量经过线性变换后得到的。
如 (1),它对应的线性变换是如下形式:
(2)
因为M是对称矩阵,因此这个变换是对称的,即只是对目的向量在x和y这两个方向进行拉伸变换,当M非对称时,(3),它所描述的变化变为:
(4)
(2)奇异值分解,奇异值分解是一个能适用于任意矩阵的一种分解方法:
A = U∑VT
假设A是一个M*N的矩阵,那么得到的U是一个M*M的矩阵(里面的向量正交,U中向量称为左奇异向量),∑是一个N*M矩阵(对角线之外都为零,对角线上的元素称为奇异值),VT(V的转置)是一N*N的矩阵(里面向量也正交,V中向量称为右奇异向量),如下图:
(5)
那么奇异值如何与特征值对应?通过构建AT*A为方阵,求这一方阵的特征值可以得到:
(AT*A)vi=λivi
这里得到的v,即右奇异向量,此外,还有:
σi=(λi)1/2
ui=(1/σi)Avi
这里的σ为奇异值,u为左奇异向量。∑中奇异值从大到小排列,和特征值分解相同,且σ下降很快。多数情况下,前面有限个奇异值之和占了所有奇异值之和的99%,因此可以选r(r<<m&r<<n),用前r大的奇异值来近似描述矩阵。
Am*n ≈ Um*r∑r*rVr*n
(6)