您的位置:首页 > 其它

奇异值分解SVD的理解与应用

2015-12-30 11:55 337 查看
本文内容是基于作者当前对奇异值分解svd的了解,不够全面,有不妥的地方还望各位读者指出。作者也会在进一步了解svd的过程中,不断更新本文。

为更好的理解这篇文章,现在这里列出几个文中出现的概念,想要更深的理解这些概念,可以看我的另一篇文章:关于特征值的理解。

向量的内积:两向量a=[a1,a2,…,an]和b=[b1,b2,…,bn],其内积为 a⋅b=a1b1+a2b2+……+anbn。

特征值与特征向量:对一个m×m矩阵A和向量x,如果存在λ使得下式成立,Ax=λx,则称λ为矩阵A的特征值,x称为矩阵的特征向量。

对角矩阵:对角矩阵是除对角线外所有元素都为零的方阵。

正交矩阵:正交是一个方块矩阵V,行与列皆为正交的单位向量,即Vn×nVTn×n=I<
19f07
/span>n,使得该矩阵的转置矩阵为其逆矩阵,VT=V−1。

直接进入正题,矩阵当中有一个非常著名的理论,即:

一个n×n的对称矩阵A可以分解为:A=VDVT。其中,V是一个n×n正交矩阵,并且列向量是矩阵A的特征向量;D是一个n×n对角矩阵,并且对角线上的值为对应特征向量的特征值。

上面的理论是针对一个n×n的对称矩阵,那么对于任意的一个m×n的矩阵A,有没有类似的表达方法呢。答案是肯定的,svd正是用来解决这个问题的。

对任意一个m×n的矩阵A,可以将其分解为:A=USVT。其中U是一个m×m的正交矩阵;S是一个m×n的矩阵,其主对角元素≥0,非主对角元素均为0;V是一个n×n的正交矩阵。

当m>n时当m<n时
S=⎡⎣⎢⎢⎢⎢⎢⎢⎢σ100⋮00σ20⋮000σ3⋮0⎤⎦⎥⎥⎥⎥⎥⎥⎥S=⎡⎣⎢σ1000σ2000σ3⋯⋯⋯000⎤⎦⎥
关于svd的证明过程,似乎更多是数值上的工作,本文想给出更多intuitive上的理解。想要了解证明的可以参考这篇论文:Kalman D. A singularly valuable decomposition: the SVD of a matrix。

这样,对任意一个矩阵,我都可以分解成三个矩阵的内积。让我们看一下它有什么神奇的性质。

AAT=USVTVSTUT=USSTUT=UDUT(1)

由于V是一个正交矩阵,VT=V−1,所以VT*V=I。S只有主对角元素不为0,那么SST的结果为一个m×m的对角矩阵D。而虽然A是任意的一个m×n的矩阵,但AAT是一个m×m的对称矩阵。这样一看,AAT=UDUT是不是和前面那个理论非常相似。那么U的列向量应该是对称矩阵AAT的特征向量,D应该是一个对角矩阵,且对角线上值是对称矩阵AAT的特征值。

ATA=VSTUTUSVT=VSTSVT=VWVT(2)

同样,V的列向量则是对称矩阵ATA的特征向量,而W则是一个n×nDm×m=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢σ2100⋮00⋱0⋮000σ2k⋮0⋯⋯⋯⋱000000⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥可以看出,矩阵S主对角线上的值,实际上是对称矩阵AAT或ATA特征值的平方根。

所以,实际上svd是一个矩阵分解方法,对于任意一个m×n的矩阵A,svd都可以将其分解成为A=USVT。其中矩阵U的列向量是对称矩阵AAT的特征向量,称作左奇异矩阵;矩阵V的的列向量是对称矩阵ATA的特征向量;S是一个m×n的矩阵,主对角线上的值是对称矩阵AAT或ATA特征值的平方根,称作奇异值,且非对角线上的值为0.

不知道写到这里,大家是不是对svd有了一个比较具体的印象。然而,上面只是从数学上解释了svd的构成,我们好奇的是,从很多地方,我们都听到了svd,即使如上面所述,它长的是这个样子,但是我们它到底可以用来做什么事情呢?

下面我们举几个svd的实际应用,加深我们对它的理解。

1)有损的数据压缩

假设我们有一个m×n的矩阵A,它表示一组数据,有n个样本,每个样本的维度为m,它包含了一定的信息。而通过svd,我们可以对矩阵A进行分解:A=USVT。将矩阵展开,可以表示为A=σ1u1vT1+σ2u2vT2+…+σkukvTk,是k个部分的组合,k为矩阵S当中,对角线上不为0的个数。可以认为,每一个部分包含了原数据的部分信息,合在一起组成了整个数据。

Um×m=⎡⎣⎢⎢⎢⎢u11u12⋮u1mu21u22⋮u2m⋯⋯⋮⋯um1um2⋮umm⎤⎦⎥⎥⎥⎥,ui=[ui1,ui2,...,uim]T

Sm×n=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢σ100⋮00⋱0⋮000σk⋮0⋯⋯⋯⋱000000⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥

Un×n=⎡⎣⎢⎢⎢⎢v11v12⋮v1nv21v22⋮v2n⋯⋯⋮⋯vn1vn2⋮vnn⎤⎦⎥⎥⎥⎥,vi=[vi1,vi2,...,vin]T

关于S还有一个特性,它是按照σ值的大小,从大到小排列的,即σ1>σ2>...>σk。U和V都是正交矩阵,u1,um和v1,vn都是长度为1的单位向量,并且两两之间不相关,即uiuj=0,i≠j。所以,可以看作,每一个部分包含信息的多少,全由σi的大小决定。

举个例子:

Sm×n=⎡⎣⎢⎢⎢⎢⎢⎢⎢900⋮0080⋮0003⋮0⋯⋯⋯⋱000000⎤⎦⎥⎥⎥⎥⎥⎥⎥

前两维,A′=σ1u1vT1+σ2u2vT2,可以包含9+89+8+3=85%的信息。而存储原来的数据,我们需要存储m*n个数字,现在我们仅仅需要存储u1,u2,v1,v2以及σ1和σ2,一共2m+2n+2个数字。这就是svd数据压缩的基本思想。

有一个例子解释的非常清晰,感兴趣的话,大家可以看一下这篇博客:奇异值分解和图像压缩

2)主成分分析法(PCA)

在前面一篇博客,PCA详解,中提到,我们一般使用svd来对PCA进行求解。由于在前面的博客中,已经详细介绍过PCA,这里我们假设大家对PCA都非常了解。PCA的核心思想就是,对一个m×n的矩阵A,即有n个样本、每个样本有m个维度,我们要找到一个m×m的矩阵U,对原矩阵A进行转换,是的转换后的矩阵UA,其协方差矩阵∑=UA(UA)T=UAATUT,是一个对角矩阵。

我们知道AAT是一个对称矩阵,根绝前面提到过的理论,AAT可以分解为:AAT=UDUT,那么UAATUT=D,正好是一个对角矩阵。而根据svd,我们知道A可以分解为:A=USVT,且左奇异矩阵U的列向量,正好是对称矩阵AAT的特征向量。

因而,如果得到了矩阵A的奇异值分解矩阵,我们就得到了一个m×m的矩阵U,这个矩阵就是PCA的转换矩阵U。

另外,还有用svd做推荐算法的,但是其实质上并不是用svd来求解,只是用到了矩阵分解的思想,这里就不详细介绍了,感兴趣的可以去了解一下。

希望本文能对你理解svd有所帮助,感谢阅读。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  svd pca 机器学习