机器学习之奇异值分解基础(SVD)

来源:互联网 发布:电脑装机配置软件 编辑:程序博客网 时间:2024/09/21 06:33

   第一次写博客,感觉蛮紧张的,就以这一篇SVD分解来展开吧。  (PS:不知道为什么,MathType中的公式无法复制过来,囧,所以只好截图了,晕!不好意思啊,第一次写不知道怎么把图片显示,后面才发现有图片上传啊。)    

    时间如白驹过隙,研究SVD(奇异值分解)已经一个月了,总算是做出了一个SVD,也就只是做出了一个SVD。毕竟这其中涉及之众多问题非我现阶段所能解决,不过还是和大家共同分享一下,希望大家能够给予我一定的建议,这样真正可行高效的SVD在大家的共同努力之下就可以实现啦。

   做这个SVD,毕竟是要分布式啊!故而不得不采用hadoop了,版本是CDH3U6.

    首先我先来简要介绍一下SVD,奇异值分解是线性代数中一种非常重要的矩阵分解,在信号处理,统计学,乃至更为具体的推荐系统,主成分分析,降维中有着十分广泛的运用。可惜的是本科阶段就应该了解的SVD没有出现在大多数的学校的教材之中,而是将其拉进了研究生阶段的研究内容。

   要说到SVD就不得不说到特征值,毕竟特征值和奇异值有着千丝万缕的联系。一说到特征值想必大家都比较清楚,这是从中学时代到大学都需要掌握的数学知识。

   首先我们有如下定义:如果一个矩阵A有特征值λ,那么必然存在特征向量v使得如下公式成立:   

       

    一个矩阵一组特征值所对应的一组特征向量是一组正交向量,特征值分解其实就是将矩阵分解成如下的形式:

                                                                                                            

           

                                                                     

       其中Q是由这个矩阵的特征向量组成的矩阵,是一个对角阵,每一个对角线上的元素就是一个特征值。q1,q2,q3分别按次序对应对角阵中的对角元素λ1,λ2,λ3。一个矩阵实际上就是一个线性变换,如果矩阵与一个向量相乘,实际上的物理意义便是向量在这个矩阵代表的线性变换中发生了空间改变。

   那么在许多的实际运用过程中,我们并不需要获取一个线性变化的所有变化方向,我们仅仅需要其中影响力排名前50%,10%,甚至1%的变化方向。特征值其实就是描述了这种变换方向,所以针对大规模的矩阵而言,我们仅仅是需要获取其主要的变化方向,即主特征值。主成分分析和潜在语义分析严重依赖于这种主特征值,要想实现这些算法,获取有用的信息,一般首先获取主特征值。特征值分解,获得了特征值和特征向量,特征值描述了某个变化方向的影响力。但是特征值分解存在很多局限,例如要求变换的矩阵必须是方阵。

  在某些运用中,比如物理上的信号分析,实际情况中一个信号的传递等过程中必然存在噪音,这些噪音往往由特征值数值较低的变化方向组成,因此在信号分析的时候,往往不考虑这些低特征值说代表的变化方向,甚至反方向的特征值可以不用计算。

  说完特征值之后,我们该进入主题中的奇异值,奇异值分解也是一种矩阵的分解。它可以将矩阵分解成如下形式:(假设A矩阵是一个m*n阶矩阵,其中的元素全部属于域K,也就是实数域或者复数域)

  这个方程的具体意义在于,将m *n阶矩阵分解成一个m* m阶矩阵的酉矩阵和一个半正定的m *n阶对角矩阵和一个n* n阶酉矩阵的乘积。

  其中 对角矩阵中的元素即A矩阵奇异值分解得到的奇异值。

  U矩阵的每一列相互正交,由一组相互正交的左奇异向量组成。

  V矩阵的每一列相互正交,由一组相互正交的右奇异向量组成。

  那么奇异值分解的几何意义其实是:对于每一个线性映射 的奇异值分解在原空间与像空间中分别找到一组标准正交基,使得的第 i个基向量映射为的第基向量的非负倍数,并将中余下的基向量映射为零向量。换句话说,线性变换在这两组选定的基上的矩阵表示为所有对角元均为非负数的对角矩阵。(具体的理解参考资料:http://zh.wikipedia.org/wiki/奇异值分解  )

 

  好的,到目前为止,我们该进入一些数学公式了:

  可以证明一个矩阵ASVD特征分解有着密切的联系,利用这些事实我们可以获得矩阵A的一个SVD

                               

                            

                           

                          

                                            

  这里我们可以获得了

  就是在对角矩阵中对角元素按从大到小的排列顺序进行排序,值越大代表了该特征值对应的变换方向影响力越大。

 

  V矩阵即是由产生的按照对应于的顺序按列存储。

  U矩阵即是由产生的按照对应于的顺序按列存储。

  在矩阵中奇异值按照从大到小的顺序排列,而且其减小的速度非常快,前10%甚至1%的奇异值之和就占了全部奇异值之和99%以上。

  由上句话这个我们可以对矩阵实现减噪,降维等分析。

  于是A矩阵可以表示为:

                                                       


                           

  其中r是一个比mn更小的数。                                                                                                                                                                                                                    

  好的,限于本人的水平,关于SVD的基础就码到这里,具体的可以查阅资料。

  后面将会介绍一些SVD分解在hadoop的map-reduce框架中的可能实现。

 

0 0