博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SVD
阅读量:5148 次
发布时间:2019-06-13

本文共 2292 字,大约阅读时间需要 7 分钟。

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

 

首先来看一个对角矩阵,

 

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

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

 

 

 

对于另一个矩阵

 

它的效果是

 

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

 

 

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

 

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

 

M
vi = λ
i
vi

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

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

 

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

 

 

 

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

 

 

 

 

奇异值分解:

 

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

 

 

 

 

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

 

 

 

和前面类似,我们可以 有

Mv1 = σ1u1

 

Mv2 = σ2u2

 

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

 

x = (
v1
x)
v1 + (
v2
x)
v2

也就是说

M
x = (
v1
x)
M
v1 + (
v2
x)
M
v2

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

 

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

 

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

 

M =
UΣ
VT

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

寻找奇异值分解

 

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

 

 

 

 

 

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

 

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

 

M
vi = σ
i
ui
M
vj = σ
j
uj.
M
vi
M
vj =
vi
T
M
T
M
vj =
vi
M
T
M
vj = λ
j
vi
vj = 0.

也就是

M
vi
M
vj = σ
iσ
j
ui
uj = 0

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

另一个例子

 

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

 

 

 

它的效果如下

 

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

 

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

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

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

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

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

也就是说我们用三个长度为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
u
1σ
1
v
1
T +
u
2σ
2
v
2
T +
u
3σ
3
v
3
T

 

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

 

Noisy image Improved image

转载于:https://www.cnblogs.com/junier/p/3299696.html

你可能感兴趣的文章
35. Search Insert Position(C++)
查看>>
ubuntu 卡在登陆界面无法进入桌面,但是可以进入命令行界面
查看>>
【转】vim中多标签和多窗口的使用
查看>>
[毕业生的商业软件开发之路]C#异常处理
查看>>
chrome 禁止自动更新
查看>>
一些php文件函数
查看>>
std::min error C2059: 语法错误:“::” 的解决方法
查看>>
Opencv保存摄像头视频&&各种编码器下视频文件占用空间对比
查看>>
「图形学」直线扫描——Bresenham算法改进了中点Bresenham算法?
查看>>
jQuery 给div绑定单击事件
查看>>
Exceptionless 生产部署笔记
查看>>
有关快速幂取模
查看>>
转 ObjExporter Unity3d导出场景地图寻路
查看>>
Linux运维必备工具
查看>>
Ubuntu配置ssh及vnc
查看>>
Kinect学习(3)Kinect for Windows SDK资料下载
查看>>
HTML5 Audio时代的MIDI音乐文件播放
查看>>
明确工作职责的重要性
查看>>
ajax方法总结
查看>>
C语言进阶——const 和 volatile 分析09
查看>>