奇异值分解(SVD)原理详解及推导(转载)

 转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/43053513算法

    在网上看到有不少文章介绍SVD的,讲的也都不错,可是感受仍是有须要补充的,特别是关于矩阵和映射之间的对应关系。前段时间看了国外的一篇文章,叫A Singularly Valuable Decomposition The SVD of a Matrix,以为分析的特别好,把矩阵和空间关系对应了起来。本文就参考了该文并结合矩阵的相关知识把SVD原理梳理一下。数据结构

   SVD不只是一个数学问题,在工程应用中的不少地方都有它的身影,好比前面讲的PCA,掌握了SVD原理后再去看PCA那是至关简单的,在推荐系统方面,SVD更是名声大噪,将它应用于推荐系统的是Netflix大奖的得到者Koren,能够在Google上找到他写的文章;用SVD能够很容易获得任意矩阵的满秩分解,用满秩分解能够对数据作压缩。能够用SVD来证实对任意M*N的矩阵均存在以下分解:ui

这个能够应用在数据降维压缩上!在数据相关性特别大的状况下存储X和Y矩阵比存储A矩阵占用空间更小!lua

   在开始讲解SVD以前,先补充一点矩阵代数的相关知识。spa

正交矩阵

   正交矩阵是在欧几里得空间里的叫法,在酉空间里叫酉矩阵,一个正交矩阵对应的变换叫正交变换,这个变换的特色是不改变向量的尺寸和向量间的夹角,那么它究竟是个什么样的变换呢?看下面这张图.net

假设二维空间中的一个向量OA,它在标准坐标系也即e一、e2表示的坐标是中表示为(a,b)'(用'表示转置),如今把它用另外一组坐标e1'、e2'表示为(a',b')',存在矩阵U使得(a',b')'=U(a,b)',则U即为正交矩阵。从图中能够看到,正交变换只是将变换向量用另外一组正交基表示,在这个过程当中并无对向量作拉伸,也不改变向量的空间位置,加入对两个向量同时作正交变换,那么变换先后这两个向量的夹角显然不会改变。上面的例子只是正交变换的一个方面,即旋转变换,能够把e1'、e2'坐标系看作是e一、e2坐标系通过旋转某个斯塔角度获得,怎么样获得该旋转矩阵U呢?以下blog

                                                                                       

                                                                  

                                                                   

a'和b'其实是x在e1'和e2'轴上的投影大小,因此直接作内积可得,then开发

                                                                                                           

从图中能够看到get

                        

因此数学

                                     

正交阵U行(列)向量之间都是单位正交向量。上面求得的是一个旋转矩阵,它对向量作旋转变换!也许你会有疑问:刚才不是说向量空间位置不变吗?怎么如今又说它被旋转了?对的,这两个并无冲突,说空间位置不变是绝对的,可是坐标是相对的,加入你站在e1上看OA,随着e1旋转到e1',看OA的位置就会改变。以下图:

如图,若是我选择了e1'、e2'做为新的标准坐标系,那么在新坐标系中OA(原标准坐标系的表示)就变成了OA',这样看来就好像坐标系不动,把OA往顺时针方向旋转了“斯塔”角度,这个操做实现起来很简单:将变换后的向量坐标仍然表示在当前坐标系中。

旋转变换是正交变换的一个方面,这个挺有用的,好比在开发中须要实现某种旋转效果,直接能够用旋转变换实现。正交变换的另外一个方面是反射变换,也即e1'的方向与图中方向相反,这个再也不讨论。

总结:正交矩阵的行(列)向量都是两两正交的单位向量,正交矩阵对应的变换为正交变换,它有两种表现:旋转和反射。正交矩阵将标准正交基映射为标准正交基(即图中从e一、e2到e1'、e2')

特征值分解——EVD

    在讨论SVD以前先讨论矩阵的特征值分解(EVD),在这里,选择一种特殊的矩阵——对称阵(酉空间中叫hermite矩阵即厄米阵)。对称阵有一个很优美的性质:它总能类似对角化,对称阵不一样特征值对应的特征向量两两正交。一个矩阵能类似对角化即说明其特征子空间即为其列空间,若不能对角化则其特征子空间为列空间的子空间。如今假设存在mxm的满秩对称矩阵A,它有m个不一样的特征值,设特征值为

                                                                                                   

对应的单位特征向量为

                                                                

则有

                                                                 

进而

                                                               

                                                  

                                                    

因此可获得A的特征值分解(因为对称阵特征向量两两正交,因此U为正交阵,正交阵的逆矩阵等于其转置)

                                                        

这里假设A有m个不一样的特征值,实际上,只要A是对称阵其均有如上分解。

矩阵A分解了,相应的,其对应的映射也分解为三个映射。如今假设有x向量,用A将其变换到A的列空间中,那么首先由U'先对x作变换:

                                                                              

U是正交阵U'也是正交阵,因此U'对x的变换是正交变换,它将x用新的坐标系来表示,这个坐标系就是A的全部正交的特征向量构成的坐标系。好比将x用A的全部特征向量表示为:

                                         

则经过第一个变换就能够把x表示为[a1 a2 ... am]':

                           

紧接着,在新的坐标系表示下,由中间那个对角矩阵对新的向量坐标换,其结果就是将向量往各个轴方向拉伸或压缩:

                              

从上图能够看到,若是A不是满秩的话,那么就是说对角阵的对角线上元素存在0,这时候就会致使维度退化,这样就会使映射后的向量落入m维空间的子空间中。

最后一个变换就是U对拉伸或压缩后的向量作变换,因为U和U'是互为逆矩阵,因此U变换是U'变换的逆变换。

所以,从对称阵的分解对应的映射分解来分析一个矩阵的变换特色是很是直观的。假设对称阵特征值全为1那么显然它就是单位阵,若是对称阵的特征值有个别是0其余全是1,那么它就是一个正交投影矩阵,它将m维向量投影到它的列空间中。

根据对称阵A的特征向量,若是A是2*2的,那么就能够在二维平面中找到这样一个矩形,是的这个矩形通过A变换后仍是矩形:

                                      

这个矩形的选择就是让其边都落在A的特征向量方向上,若是选择其余矩形的话变换后的图形就不是矩形了!

奇异值分解——SVD

   上面的特征值分解的A矩阵是对称阵,根据EVD能够找到一个(超)矩形使得变换后仍是(超)矩形,也即A能够将一组正交基映射到另外一组正交基!那么如今来分析:对任意M*N的矩阵,可否找到一组正交基使得通过它变换后仍是正交基?答案是确定的,它就是SVD分解的精髓所在。

   如今假设存在M*N矩阵A,事实上,A矩阵将n维空间中的向量映射到k(k<=m)维空间中,k=Rank(A)。如今的目标就是:在n维空间中找一组正交基,使得通过A变换后仍是正交的。假设已经找到这样一组正交基:

                                                               

则A矩阵将这组基映射为:

                                                            

若是要使他们两两正交,即

                                      

根据假设,存在

                                      

因此若是正交基v选择为A'A的特征向量的话,因为A'A是对称阵,v之间两两正交,那么

                                                  

这样就找到了正交基使其映射后仍是正交基了,如今,将映射后的正交基单位化:

由于

                  

因此有

                                

因此取单位向量

                                        

由此可得

                

当k < i <= m时,对u1,u2,...,uk进行扩展u(k+1),...,um,使得u1,u2,...,um为m维空间中的一组正交基,即

一样的,对v1,v2,...,vk进行扩展v(k+1),...,vn(这n-k个向量存在于A的零空间中,即Ax=0的解空间的基),使得v1,v2,...,vn为n维空间中的一组正交基,即

则可获得

继而能够获得A矩阵的奇异值分解:

                                                 

                

如今能够来对A矩阵的映射过程进行分析了:若是在n维空间中找到一个(超)矩形,其边都落在A'A的特征向量的方向上,那么通过A变换后的形状仍然为(超)矩形!

vi为A'A的特征向量,称为A的右奇异向量,ui=Avi实际上为AA'的特征向量,称为A的左奇异向量。下面利用SVD证实文章一开始的满秩分解:

利用矩阵分块乘法展开得:

能够看到第二项为0,有

                               

            

则A=XY便是A的满秩分解。

整个SVD的推导过程就是这样,后面会介绍SVD在推荐系统中的具体应用,也就是复现Koren论文中的算法以及其推导过程。

 

参考文献:A Singularly Valuable Decomposition The SVD of a Matrix

相关文章
相关标签/搜索