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

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

下图显示了这个映射的效果: 平面被横向拉伸了3倍,纵向没有变化。
![]() |
![]() |
![]() |
对于另一个矩阵

它的效果是
![]() |
![]() |
![]() |
这样一个变化并不是很好描述,然而当我们将坐标系旋转45度后,我们可以看出
![]() |
![]() |
![]() |
这时,我们发现这个新的网格上发生的变化和网格在对角阵下发生变化的效果相似。
这是一个对称矩阵的例子,可以看出,对称矩阵经过旋转后,其作用就和对角阵类似了。数学上,对于一个对称矩阵 M, 我们可以找到一组正交向量 vi 从而 Mvi 相当于 vi上的标量乘积; 也就是
Mvi = λivi
λi 是标量,也就是对应对角阵中对角线上的元素. 由于这个性质,我们称 vi 是 M 的特征向量; λi 为特征值. 一个对称矩阵不同特征值对应的特征向量是正交的。
对于更广泛的情况,我们看看是否能从一个正交网格转换到另一个正交网格. 考虑一个非对称矩阵:

这个矩阵的效果形象的称为剃刀(shear)。
![]() |
![]() |
![]() |
这个矩阵将网格在水平方向拉伸了,而垂直方向没有变化。如果我们将网格旋转大约58度,这两个网格就又会都变为正交的了。
![]() |
![]() |
![]() |
奇异值分解:
考虑一个 2 *2 矩阵, 我们可以找到两组网格的对应关系。用向量表示,那就是当我们选择合适的单位正交向量 v1 和 v2, Mv1 和 Mv2 也是正交的.
![]() |
![]() |
![]() |
我们使用 u1 和 u2 代表 Mv1 和 Mv2的方向. Mv1 和 Mv2 的长度表示为 σ1 和 σ2,也就是网格在每个方向的拉伸. 这两个拉伸值叫做M的 奇异值(sigular value)

和前面类似,我们可以 有
Mv1 = σ1u1
Mv2 = σ2u2
我们一直讨论的 v1 和 v2 是一对正交向量, 对于一般的向量 x,我们有这样的投影关系
x = (v1
x) v1 + (v2
x) v2
也就是说
Mx = (v1
x) Mv1 + (v2
x) Mv2
Mx = (v1
x) σ1u1 + (v2
x) σ2u
即
Mx = u1σ1 v1Tx + u2σ2 v2Tx ---> M = u1σ1 v1T + u2σ2 v2T
这个关系可以写成矩阵形式
M = UΣVT
U 的列是 u1 和 u2, Σ σ1 和 σ2构成的对角阵, V 的列是 v1 和 v2. 即V描述了域中的一组正交基,U描述了相关域的另一组正交基,Σ 表述了U中的向量与V中向量的拉伸关系。
寻找奇异值分解
奇异值分解可以应用于任何矩阵,对于前面的例子,如果我们加上一个圆,那它会映射成一个椭圆,椭圆的长轴和短轴定义了新的域中的正交网格,可以被表示为Mv1 and Mv2。
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
换句话说,单位圆上的函数 |Mx| 在 v1 取得最大值,在 v2取得最小值. 这将单位圆上的函数优化问题简化了。可以证明,这个函数的极值点就出现在MTM的特征向量上,这个矩阵一定是对称的,所以不同特征值对应的特征向量vi是正交的.
σi = |Mvi|就是奇异值, ui 是 Mvi方向的单位向量.
Mvi = σiuiMvj = σjuj. Mvi
Mvj = viTMT Mvj = vi
MTMvj = λjvi
vj = 0.
也就是
Mvi
Mvj = σiσj ui
uj = 0
因此, ui 和 uj 也是正交的。所以我们就把一组正交基 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 |
![]() |
![]() |
SVD的更多相关文章
- 奇异值分解(SVD)原理与在降维中的应用
奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域.是 ...
- SVD奇异值分解的基本原理和运用
SVD奇异值分解: SVD是一种可靠的正交矩阵分解法.可以把A矩阵分解成U,∑,VT三个矩阵相乘的形式.(Svd(A)=[U*∑*VT],A不必是方阵,U,VT必定是正交阵,S是对角阵<以奇异值 ...
- 奇异值分解 SVD
一基本知识 A是一个m*n的矩阵,那么A的SVD分解为\(A_{mn} = U_{mm}\Sigma _{mn}V^T_{nn}\),其中\(U^TU = I\),\(V^TV = I\),UV的列向 ...
- SVD的几何意义,以及在去噪,推荐系统中的应用
很多文章说到奇异值分解的时候总是大概罗列下它的功能,并没有对功能及物理意义进行过多的阐述,现在我来对奇异值进行整理一下. 一 奇异值分解 对任意的矩阵A∈Fmn,rank(A)=r(矩阵的秩),总可以 ...
- Matrix Factorization SVD 矩阵分解
Today we have learned the Matrix Factorization, and I want to record my study notes. Some kownledge ...
- PCA本质和SVD
一.一些概念 线性相关:其中一个向量可以由其他向量线性表出. 线性无关:其中一个向量不可以由其他向量线性表出,或者另一种说法是找不到一个X不等于0,能够使得AX=0.如果对于一个矩阵A来说它的列是线性 ...
- 协同过滤和简单SVD优化
协同过滤(collaborative filtering) 推荐系统: 百度百科的定义是:它是利用电子商务网站向客户提供商品信息和建议,帮助用户决定应该购买什么产品,模拟销售人员帮助客户完成购买过程主 ...
- 奇异值分解(SVD)和简单图像压缩
SVD(Singular Value Decomposition,奇异值分解) 算法优缺点: 优点:简化数据,去除噪声,提高算法结果 缺点:数据的转换可能难于理解 适用数据类型:数值型数据 算法思想: ...
- 数值分析之奇异值分解(SVD)篇
在很多线性代数问题中,如果我们首先思考若做SVD,情况将会怎样,那么问题可能会得到更好的理解[1]. --Lloyd N. ...
- paper 128:奇异值分解(SVD) --- 线性变换几何意义[转]
PS:一直以来对SVD分解似懂非懂,此文为译文,原文以细致的分析+大量的可视化图形演示了SVD的几何意义.能在有限的篇幅把这个问题讲解的如此清晰,实属不易.原文举了一个简单的图像处理问题,简单形象,真 ...
随机推荐
- lambda的使用ret = filter(lambda x : x > 22 ,[11,22,33,44])
#!/usr/bin/env python #def f1(x) : # return x > 22 ret = filter(lambda x : x > 22 ,[11,22,33,4 ...
- Vsftpd 配置
步骤 本次是在CentOS 6的版本上操作的. 说明:以下命令均在root用户下执行. (1)安装vsftpd 没啥好说的一条命令搞定. $yum install vsftpd 中间会提示确认,输 ...
- 怎样在excel中添加下拉列表框
用excel2013打开要编辑的工作表,例子是一个班级名单,可以看到政治面貌目前还没有填写 接着我们找一个空白处,依次写入政治面貌的可能选项: 群众.共青团员 然后选中“政治面貌”这一列,点击 ...
- zabbix脚本报警
zabbix问端设置: 1,设置报警类型 2.设置用户及媒体类型 send_to 就是zabbix输出的$1,脚本中药发给谁 3.设置触发器和动作 触发器 test.temp_conn (自己写一个简 ...
- Java 集合 - LinkedList
一.源码解析 (1). 属性 // 链表长度 transient int size = 0; // 链首和链尾 transient Node<E> first; transient Nod ...
- (转)QML代码与现有Qt UI代码整合
http://blog.csdn.net/henreash/article/details/7934315
- [Mysql] 一些记录
1> 修改表的字段 alter table trade_market change reqype reqtype int(10) unsigned not null;alter table tr ...
- Delphi名站以及高手Blog
以前知道的: http://cnblogs.com/del (万一兄的,这个不用解释了) http://www.cnblogs.com/del/archive/2010/04/25/1720750.h ...
- Shell 语法之结构化命令(流程控制)
许多程序在脚本命令之间需要某种逻辑流控制,允许脚本根据变量值的条件或者其他命令的结果路过一些命令或者循环执行这些命令.这些命令通常被称为结构化命令.和其他高级程序设计语言一样,shell提供了用来控制 ...
- Deep Learning 15:RBM的学习
RBM是深度学习的核心,所以必须彻底清楚地理解RBM原理.推导及其训练方法 1.读学位论文“基于深度学习的人脸识别研究”: 对RBM.DBN的介绍比较详细,可以作为基础阅读,再去读英文论文. 2.RB ...


















