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)viivi

这里得到的v,即右奇异向量,此外,还有:

σi=(λi1/2

ui=(1/σi)Avi

这里的σ为奇异值,u为左奇异向量。∑中奇异值从大到小排列,和特征值分解相同,且σ下降很快。多数情况下,前面有限个奇异值之和占了所有奇异值之和的99%,因此可以选r(r<<m&r<<n),用前r大的奇异值来近似描述矩阵。

Am*n ≈ Um*rr*rVr*n

(6)

最新文章

  1. Failed to create the Java Virtual Machine.问题的解决
  2. ie6,ie7兼容性总结(转)
  3. PHP gmdate() 函数
  4. UE4编程之C++创建一个FPS工程(二)角色网格、动画、HUD、子弹类
  5. BZOJ 1061: [Noi2008]志愿者招募 费用流
  6. jQuery css() 方法
  7. JS函数式编程【译】2.2 与函数共舞
  8. [算法] get_lucky_price price
  9. vecor预分配内存溢出2
  10. WebRTC clientICE 延迟问题
  11. sql语句中查询出的数据添加一列,并且添加默认值
  12. test maekdown 2
  13. Python初识与简介【开篇】
  14. 手把手教你如何使用Cocos2d Console 进行html5项目发布
  15. MediaInfo代码阅读
  16. QT写TXT文件
  17. JS 通过字符串取得对应对象
  18. Intellij idea 添加浏览器
  19. echarts.js应用之map
  20. robotium—只有apk文件的测试

热门文章

  1. T-Sql 递归查询(给定节点查所有父节点、所有子节点的方法)
  2. CentOS6.5 简单配置Nginx + tomcat
  3. slideDoor(学习某编程网站的,仅作记录和学习)
  4. attr和prop区别
  5. Eclipse 快捷键 (应用中自己总结)
  6. U盘修复
  7. js 中与元素有关的高度
  8. 從 Internet 安裝 Cygwin
  9. 利用eclips创建一个maven项目
  10. POJ Challenge消失之物