http://www.bfcat.com/index.php/2012/03/svd-tutorial/

SVD分解(奇异值分解),本应是本科生就掌握的方法,然而却经常被忽视。实际上,SVD分解不但很直观,而且极其有用。SVD分解提供了一种方法将一个矩阵拆分成简单的,并且有意义的几块。它的几何解释可以看做将一个空间进行旋转,尺度拉伸,再旋转三步过程。

首先来看一个对角矩阵,

几何上, 我们将一个矩阵理解为对于点 (x, y) 从一个平面到另一个平面的映射:

下图显示了这个映射的效果: 平面被横向拉伸了3倍,纵向没有变化。

对于另一个矩阵

它的效果是

这样一个变化并不是很好描述,然而当我们将坐标系旋转45度后,我们可以看出

这时,我们发现这个新的网格上发生的变化和网格在对角阵下发生变化的效果相似。

这是一个对称矩阵的例子,可以看出,对称矩阵经过旋转后,其作用就和对角阵类似了。数学上,对于一个对称矩阵 M, 我们可以找到一组正交向量 vi 从而 Mvi 相当于 vi上的标量乘积; 也就是

Mvi = λivi

λi 是标量,也就是对应对角阵中对角线上的元素. 由于这个性质,我们称 viM 的特征向量;  λi 为特征值. 一个对称矩阵不同特征值对应的特征向量是正交的。

对于更广泛的情况,我们看看是否能从一个正交网格转换到另一个正交网格. 考虑一个非对称矩阵:

这个矩阵的效果形象的称为剃刀(shear)。

这个矩阵将网格在水平方向拉伸了,而垂直方向没有变化。如果我们将网格旋转大约58度,这两个网格就又会都变为正交的了。


奇异值分解:

考虑一个 2 *2 矩阵, 我们可以找到两组网格的对应关系。用向量表示,那就是当我们选择合适的单位正交向量 v1v2,Mv1Mv2 也是正交的.

我们使用 u1u2 代表 Mv1Mv2的方向.  Mv1Mv2 的长度表示为 σ1 和 σ2,也就是网格在每个方向的拉伸. 这两个拉伸值叫做M的 奇异值(sigular value)

和前面类似,我们可以 有

Mv1 = σ1u1

Mv2 = σ2u2

我们一直讨论的 v1v2 是一对正交向量, 对于一般的向量 x,我们有这样的投影关系

x = (v1x) v1 + (v2x) v2

也就是说

Mx = (v1x) Mv1 + (v2x) Mv2

Mx = (v1x) σ1u1 + (v2x) σ2u

Mx = u1σ1 v1Tx + u2σ2 v2Tx    --->     M = u1σ1 v1T + u2σ2 v2T

这个关系可以写成矩阵形式

M = UΣVT

U 的列是 u1u2, Σ  σ1 和 σ2构成的对角阵,  V 的列是 v1v2.  即V描述了域中的一组正交基,U描述了相关域的另一组正交基,Σ 表述了U中的向量与V中向量的拉伸关系。

寻找奇异值分解

奇异值分解可以应用于任何矩阵,对于前面的例子,如果我们加上一个圆,那它会映射成一个椭圆,椭圆的长轴和短轴定义了新的域中的正交网格,可以被表示为Mv1 and Mv2

换句话说,单位圆上的函数 |Mx| 在  v1 取得最大值,在 v2取得最小值. 这将单位圆上的函数优化问题简化了。可以证明,这个函数的极值点就出现在MTM的特征向量上,这个矩阵一定是对称的,所以不同特征值对应的特征向量vi是正交的.

σi = |Mvi|就是奇异值,  uiMvi方向的单位向量.

Mvi = σiui

Mvj = σjuj.

Mvi Mvj = viTMT Mvj = vi MTMvj = λjvi vj = 0.

也就是

Mvi Mvj = σiσj ui uj = 0

因此, uiuj 也是正交的。所以我们就把一组正交基 vi 变换到了另一组正交基 ui.

另一个例子

我们来看一个奇异矩阵(秩为1,或只有一个非零奇异值)

它的效果如下

在这个例子中,第二个奇异值为0,所以 M = u1σ1 v1T. 也就是说,如果有奇异值为0,那么这个矩阵就有降维的效果。因为0奇异值对应的维度就不会出现在右边。这对于计算机科学中的数据压缩极其有用。例如我们想压缩下面的15 25 像素的黑白图像

我们可以看出这个图像中只有三种列,即

把图像表示成一个15 25 的矩阵,总共有 375 个元素.

然而当我们做了奇异值分解,会发现非零奇异值仅有3个,

σ1 = 14.72, σ2 = 5.22, σ3 = 3.31

因此,这个矩阵就可以被表示为   M=u1σ1 v1T + u2σ2 v2T + u3σ3 v3T

也就是说我们用三个长度为15的向量vi,三个长度为25的向量ui,以及三个奇异值,总共123个数字表示了这个375个元素组成的矩阵。奇异值分解找到了矩阵中的冗余信息实现了降维。

可以看出,奇异值分解捕获了图像中的主要信息。因此,又假设上一个例子里引入了噪声,

当我们用同样的方法做奇异值分解,我们得到如下非零奇异值

σ1 = 14.15,σ2 = 4.67,σ3 = 3.00,σ4 = 0.21,σ5 = 0.19,...,σ15 = 0.05

显然,前三个奇异值比其他的大很多,说明其中包括了绝大部分信息。如果我们只要前三个,

M u1σ1 v1T + u2σ2 v2T + u3σ3 v3T

我们就实现了图像的降噪。

Noisy image
Improved image

图片和实例来源于 www.asm.org

SVD分解的理解[转载]的更多相关文章

  1. SVD分解的理解

    对称阵A 相应的,其对应的映射也分解为三个映射.现在假设有x向量,用A将其变换到A的列空间中,那么首先由U'先对x做变换: 由于正交阵“ U的逆=U‘ ”,对于两个空间来讲,新空间下的“ 基E' 坐标 ...

  2. SVD分解技术详解

    版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系wheeleast@gm ...

  3. SVD分解技术数学解释

    SVD分解 SVD分解是LSA的数学基础,本文是我的LSA学习笔记的一部分,之所以单独拿出来,是因为SVD可以说是LSA的基础,要理解LSA必须了解SVD,因此将LSA笔记的SVD一节单独作为一篇文章 ...

  4. 对SVD奇异值分解的理解

      首先推荐一篇博客,奇异值分解(SVD)原理详解及推导 - CSDN博客,讲解的很清楚.这里我谈谈自己的理解,方便以后回顾.   如果把向量理解为空间中的一个元素,那么矩阵可以理解为两个空间上的映射 ...

  5. 机器学习之SVD分解

    一.SVD奇异值分解的定义 假设是一个的矩阵,如果存在一个分解: 其中为的酉矩阵,为的半正定对角矩阵,为的共轭转置矩阵,且为的酉矩阵.这样的分解称为的奇异值分解,对角线上的元素称为奇异值,称为左奇异矩 ...

  6. opencv2.4中SVD分解的几种调用方法

    原帖地址: http://blog.sina.com.cn/s/blog_6109b5d00101ag7a.html       在摄影测量和计算机视觉中,考虑最优解问题时,经常要用到SVD分解.奇异 ...

  7. 投影矩阵、最小二乘法和SVD分解

    投影矩阵广泛地应用在数学相关学科的各种证明中,但是由于其概念比较抽象,所以比较难理解.这篇文章主要从最小二乘法的推导导出投影矩阵,并且应用SVD分解,写出常用的几种投影矩阵的形式. 问题的提出 已知有 ...

  8. 【机器学习】推荐系统、SVD分解降维

    推荐系统: 1.基于内容的实现:KNN等 2.基于协同滤波(CF)实现:SVD → pLSA(从LSA发展而来,由SVD实现).LDA.GDBT SVD算是比较老的方法,后期演进的主题模型主要是pLS ...

  9. 《数学之美》第15章 矩阵计算和文本处理中两个分类问题——SVD分解的应用

    转载请注明原地址:http://www.cnblogs.com/connorzx/p/4170047.html 提出原因 基于余弦定理对文本和词汇的处理需要迭代的次数太多(具体见14章笔记),为了找到 ...

随机推荐

  1. Ajax全解

    jQuery确实是一个挺好的轻量级的JS框架,能帮助我们快速的开发JS应用,并在一定程度上改变了我们写JavaScript代码的习惯. 我们先来看一些简单的方法,这些方法都是对jQuery.ajax( ...

  2. leetcode算法思想快速一览

    整理了一下思路,想深入了解还得多去写,无奈时间紧迫的情况下抛砖引玉也不失为下策: 1.Two Sum Easy 给出一个数组,找出其中两个和为目标值的坐标.思路: [1]排序. 和为目标值,一般的思路 ...

  3. SSH集成log4j日志环境[转]

    第一步:在web.xml初始化log4j <context-param> <param-name>log4jConfigLocation</param-name> ...

  4. 新版Chrome自动禁用第三方插件的解决办法[转]

    原文地址:http://www.douban.com/note/375734834/?type=like Chrome的新策略里面禁用了除chrome web store下载的所有第三方扩展,这个很烦 ...

  5. String课后作业

    请查看String.equals()方法的实现代码,注意学习其实现方法. public class StringEquals { @param args the command line argume ...

  6. 上下文菜单项(contextMenu)----长按按钮弹出菜单项

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  7. Android Camera进行拍照

    Android应用提供了Camera来控制拍照,使用Camera进行拍照的步骤: 1.调用Camera的open()方法打开相机. 2.调用Camera的getParameters()方法获取拍照参数 ...

  8. IE下只读INPUT键入BACKSPACE 后退问题(readonly='true')

    在IE下,如果在readonly的input里面键入backspace键,会触发history.back(), 用以下jquery代码修正之 $("input[readOnly]" ...

  9. Annotation注解(有源代码)

    注解(annotation)概述: ·从JDK5.0 开始,java增加了对元数据(MetaData)的支持,也就是Annotation(注解) ·Annotation其实就是代码里的特殊标记,这些标 ...

  10. SecureCRT清屏

    Ctrl + l:清屏Ctrl + c:终止命令Ctrl + z:挂起命令