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)

svd自我学习的更多相关文章

  1. UFLDL教程笔记及练习答案三(Softmax回归与自我学习***)

    :softmax回归 当p(y|x,theta)满足多项式分布,通过GLM对其进行建模就能得到htheta(x)关于theta的函数,将其称为softmax回归. 教程中已经给了cost及gradie ...

  2. java知识体系(自我学习中)

    java自我学习知识体系

  3. JavaScript自我学习之解析与执行

    如果想要学好JavaScript那么我们首先必须要知道浏览器JavaScript引擎是如何解释执行JavaScript代码的,作为一名菜鸟,从自己学习JavaScript的过程来说,真心觉得不了解这些 ...

  4. PIL库自我学习总结及应用(美白,磨皮,搞笑图片处理)

    Hello!今天我们来学习一下这个神奇的图片处理的第三方函数库——PIL库 (本blog部分图片及代码来自网络) 这是一个支持图像存储.显示和处理的函数库,它能够处理几乎所有图像格式,可以完成对图像的 ...

  5. 开源项目初涉(C++自我学习开始)

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://i.cnblogs.com/EditPosts.aspx?postid=8428885 临近2018农历新年,我还在上班,哈哈. ...

  6. [.NET自我学习]Delegate 泛型

    阅读导航 委托Delegate 泛型 1. 委托Delegate 继承自MulticastDelegate 声明委托定义签名: public delegate int DemoDelegate(int ...

  7. maven 自我学习笔记

    1.常用网站: maven.apache.org http://mvnrepository.com/   2.命令 mvn -v 查看maven的版本 mvn -compile 在项目的根目录下编译项 ...

  8. 关于java异常处理的自我学习

    算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCastException 数组负下标异常:NegativeAr ...

  9. 自我学习成长系列之<<FirstHead设计模式>>

    第一章 设计模式入门 1.好词好句: 好的设计是可以应付改变. 2.驱动改变的因素:(a)客户需求不清晰,后期会一直变 (b)遇到坑爹的产品,自己不会全扔给程序员 (c)在开发过程中,产生一个新概念, ...

随机推荐

  1. ASP.NET MVC 提示there was error getting the type的解决方法

    在MVC中根据模型类创建控制器时提示there was error getting the type的原因是你新建的这个类模型文件后没有重新生成,先重新生成项目就可以添加控制器了.

  2. (转)awk实例练习(二)

    文章转自 http://www.cnblogs.com/zhuyp1015/archive/2012/07/14/2591842.html 先来总结一下awk内置变量: ARGC          命 ...

  3. Easy Sysprep更新日志-skyfree大神

    Easy Sysprep更新日志: Skyfree 发表于 2016-1-22 13:55:55 https://www.itsk.com/forum.php?mod=viewthread&t ...

  4. js中function函数

    function:是具备某个功能的方法,方法本身没有意义,只有执行方法才有价值. function: 1 创建一个函数: 2 执行这个方法: 例: 创建 function 方法名(){ 存放某个功能的 ...

  5. eclipse不显示Android SDK Manager标签

    新版的eclipse配置好android开发环境后没有显示在window菜单里显示Android SDK Manager,也没有在工具栏里出现android的工具图标.但可以通过android sdk ...

  6. jmeter ForEach Controller学习

    ForEach Controller: foreach一般和用户定义变量一起使用,在用户定义变量中定义3个变量 foreach中输出变量名称(vname),这种方式可以生成一个vname的变量,点击运 ...

  7. Unity3D 中的3种坐标系

    Unity3D Script API : Camera 若干文章: 1.Screen VS Viewport What is the difference 2.Screen,Viewport有什麽區別 ...

  8. Linux内核原子(1) - spinlock的实现

    spinlock的数据结构spinlock_t定义在头文件linux/spinlock_types.h里面: typedef struct { raw_spinlock_t raw_lock; #if ...

  9. H5瀑布流如何实现

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. 个人介绍和Github使用流程

    我叫石莉静,来自网络工程143班,学号1413042067 我的兴趣爱好有看电影.动漫,听音乐,摄影,寻找美食等等. 个人编程能力:非常真诚的说,我的编程能力蛮差的,用C++写过一共写过...(很少很 ...