经常看到SVD奇异值分解,但一直没有去了解它讲的什么,刚好在李航老师统计学习方法第二版上是单独的一章,下面看了一些博客总结一下~
任意一个 m × n m×n m×n的矩阵 = m m m阶正交阵 × × × 降序排列的非负对角线元素组成的 m × n m×n m×n对角阵 × × × n n n阶正交阵
另外矩阵的奇异值分解一定存在,但不唯一(因为特征向量表示可以不唯一)奇异值分解可以看作是矩阵数据压缩的一种方法,即用因子分解的方式近似地表示原始矩阵,这种近似是在平方损失意义下的最优近似。首先,对于方阵我们是可以直接分解的,比较简单,(也是考研那时候数学必考题),即一个方阵等于三部分乘积,中间是特征值组成的,两边是特征向量组成的矩阵以及它的逆。这部分就属于基础的线性代数部分了,具体见下图: ok,有小伙伴就会问了,为什么要做上述的分解?我记得考研那时候宇哥就说过,分解成这样的形式,最后矩阵就可以写成二项式的形式了,比如如果特征值为1,2,3,那么A就可以表示成 f = x 1 2 + 4 x 2 2 + 9 x 3 2 f={x_1}^2+4{x_2}^2+9{x_3}^2 f=x12+4x22+9x32 ,写成这样更简单?具体我也有点遗忘了,但今天看到一篇写的很好地博客,里面做出了解释,即为什么要做矩阵的特征值分解?
结论:特征分解的过程其实是在提取这个矩阵最重要的特征首先对矩阵不论是左乘还是右乘,本质是在做线性变换,而如果我们想要描述好一个变换,那我们就描述好这个变换主要的变化方向就好了。其次怎么衡量这个主要变化方向呢?其实是看特征值的大小!分解得到的 Σ Σ Σ矩阵是一个对角阵,里面的特征值是由大到小排列的,这些特征值所对应的特征向量就是描述这个矩阵变化方向(从主要的变化到次要的变化排列)最后总结下,特征值分解可以得到特征值与特征向量,特征值表示的是 这个特征到底有多重要,而特征向量表示 这个特征是什么,可以将每一个特征向量理解为一个线性的子空间,我们可以利用这些线性的子空间干很多的事情。ok,上面提到了矩阵的特征值分解的目的是提取特征的最重要的特征,特征值是表示这个特征到底多重要,而特征向量表示这个特征是什么意思,那既然有了矩阵的特征值分解,还为什么要有个奇异值分解呢?
原因是上面提到了矩阵的特征值分解必须为方阵!而现实生活很多实际场景并不一定就是方阵,很可能行和列不一致,那这时候我们同样希望能够提取特征,该怎么处理呢?奇异值分解SVD!
上面的2.2小节提到了SVD是我们用来分解普通的矩阵(非方阵),进而描述普通矩阵的重要特征!那具体是如何实现的呢?首先上两张特别好的图:
完全奇异值分解: 部分奇异值分解:上述就是完全奇异值分解的过程,其实工作还是比较简单的,就涉及到了线代中求矩阵的特征值和特征向量!以及矩阵乘积的运算!
相信大家肯定有疑问,上面这种部分分解好是好,但为什么可以这么做呢?
因为在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上了。也就是说,我们也可以用前 r r r大的奇异值来近似描述矩阵!
这里借用刘建平老师的博客的例子: 同时,我们可以在一个WolframAlpha网站计算,计算结果见下图: 结果一致,完美!
但有一个小的问题,上述PCA用到的也仅仅是SVD的右奇异矩阵 V T V^T VT,左奇异矩阵是否有用武之地呢?答案是有的。
实现行数的压缩! 小结一下:
SVD的左奇异矩阵用于行数的压缩
SVD的右奇异矩阵用于特征维度的压缩,即PCA降维!
这个也是比较有意思的一个实际问题,吴军老师在数学之美这本书也提到了这个问题。我们来稍微概括总结一下:
案例背景:如何对新闻进行分类呢?即一篇一篇的文章,如何给它对应到相对应的主题?
书中吴军老师提到了两种方法:
首先是对文档进行分词,然后根据TF-IDF来计算词汇的重要性得分!于是将一篇文档变成了数值,即TF-IDF得分向量。接下来就采用模型的方法进行分类处理!
方法1:基于余弦定理的方式进行分类。即如果两篇文档的向量夹角很小,认为相关性很强,如果夹角接近90度,认为基本不相关!但是这样有一个问题就是如果算两两文档的夹角余弦,一旦样本量增大到一定程度,计算效率就会特别的低下,这时候可以有几种优化的方法: 向量的长度部分不需要重复计算。算一个存一个后面调用计算分子,两个向量的内积的时候只考虑非0元素!删除虚词!虚词其实是噪音,干扰正常分类!和通信中的过滤掉低频噪音原理类似!位置加权!开头和结尾比中间重要,标题比正文更重要! 方法2:基于SVD分解的方式进行分类。SVD分解用于新闻分类的一个很朴素的思想就是:能不能一次性把所有新闻的相关性算出来呢?答案是可以的!具体见下文的实例:
之前的预处理后的数据格式为: SVD分解之后的为: 如何解读上述分解的结果呢?
可以理解为分出了3个主题。左奇异矩阵可以看到不同词汇属于不同主题的概率,这样就可以得出不同词汇之间的相关性!右奇异矩阵可以看到不同文章属于不同主题的概率,这样就可以得到不同文章之间的相关性了!如果右奇异矩阵每列取max,其余为0,就实现了文本分类的效果了!这个案例的详细版本可以见:机器学习中的数学(5)-强大的矩阵奇异值分解(SVD)及其应用
后续还进行了降维,二维平面可视化,实现了聚类的效果,完美!
适用数据类型:数值型数据
