标签:svd
奇异值分解可以方便地把一个矩阵(包含我们感兴趣的数据)分解得更加简单和有意义。 本文讲解了奇异值分解的几何解释,顺便也介绍了一些应用。
From http://www.ams.org/samplings/feature-column/fcarc-svd
David Austin,Grand ValleyState University
本文的主题是奇异值分解(singular value decomposition,SVD),它应该是数学系研究生标准课程的一部分,但是经常被忽略。除了十分直观,此类分解(decomposition)还极其有用。比如,Netflix,一在线电影租赁公司,为改进他们的推荐系统设立了100万美元奖金,要求是准确度(accuracy)提高10%。 令人惊讶的是,这个看起来很普通的问题,实际上十分具有挑战性。参与的团队正在使用十分复杂的技术。这些技术的核心便是奇异值分解。
奇异值分解可以方便地把一个矩阵(包含我们感兴趣的数据)分解得更加简单和有意义。 本文讲解了奇异值分解的几何解释,顺便也介绍了一些应用。
让我们先看一些简单的2x2的矩阵。第一个例子是如下对角矩阵(diagonal matrix)
从几何学角度,我们可以把类似矩阵看作是一种转换:在平面上取一点(x, y),然后通过矩阵相乘,把此点转换到另外一点:
此转换效果是:平面在水平方向伸展了3倍,垂直方向无变化。
现在我们再看矩阵
它产生以下效果:
此转换看上去不像前面的简单明了。但是让我们把网格(grid,http://mathworld.wolfram.com/Grid.html)旋转45度,看看会发生什么情况。
啊哈。我们发现这个新网格的转换与第一张图的网格转换一样:乘以一个对角矩阵,网格在某个方向上拉伸了3倍。
因为矩阵M是对称的,即M的转置(transpose,沿着对角翻转)等于M,所以这只是一类特殊的情况。如果我们有一2x2的对称矩阵,通常会产生以下转换效果:先在domain中旋转网格,然后在两个方向上拉伸(stretch)或者反射(reflect)。换句话讲,对称矩阵的行为像对角矩阵(除了旋转)。
说得更数学化些:给定一对称矩阵M, 我们可能会找到一由正交向量(orthogonal vector) vi 组成的集合,M*vi是vi的标量倍(scalarmultiple),也就是说
Mvi = λivi
其中λi 是一标量。
从几何角度来说,这意味着当向量vi乘以M后,它被简单的拉伸(stretch)或者反射(reflect)了。
正因为这个特性,我把向量vi 称为矩阵M的特征向量(eigenvector);标量λi 称为特征值(eigenvalue)。一个容易验证的重要的事实是:对称矩阵的特征向量(带不同特征值)是正交的。
如果用对称矩阵的特征向量按放(align)网格,这个矩阵会再拉伸(stretch)或者反射(reflect)这个(被旋转后的)网格,如同它对自己的特征向量一样。
这个线性转换的几何描述属于简单的一类:网格只是在某个方向被拉伸了。对于更加普通的矩阵,我们会问这么一个问题:我们能否找到一个正交网格(两组线相互垂直的),能转换到另外一个正交网格。让我们看最后一个例子,它使用一非对称矩阵:
这个矩阵产生一个称为 “修剪”(shear)的几何效果。
沿着水平轴,容易找到一组特征向量。但是,上面的图片显示这些特征向量不能用于创建正交的网格(能转换到另外一个正交网格),虽然如此,我们还是先看一下我们旋转这个网格30度会发生什么。
注意由平行四边形构成的位于坐标原点的夹角在右边增加了。让我们把网格旋转60度。
嗯。右边的网格看上去是正交的了。实际上,通过在domain中旋转网格大约58.28度,两个网格就全是正交的了。
这就是SVD在2x2矩阵下的几何学本质:对于任意的2x2矩阵,我们能找到一个正交的网格(grid),它被转换到了另外一个正交网格。
我们使用向量来描述这个现象:如果我们通过某种方式挑出两个单位向量(unit vector)v1和v2,它们是正交的,向量Mv1 和Mv2 也是正交的。
我们用u1和u2代表向量Mv1 和Mv2 方向的单位向量,用σ1 andσ2代表向量Mv1 和Mv2的长度,它们描述网格在这些方向上的拉伸量。这些数字称为M的奇异值(singularvalue,在这个例子里,奇异值是golden ratio 和它的reciprocal,但是在这里不重要)。
因此我们有
Mv1 = σ1u1
Mv2 = σ2u2
现在我们可简单说一下矩阵M是如何处理普通向量x的。因为单位向量v1和v2是正交的(译者注:形成了一规范正交基,orthonomal basis),所以我们有:
x = (v1?x)v1 + (v2?x)v2
(译者注:x ?v1 = (v1?x) v1?v1 + (v2?x)v2?v1 = (v1?x) *1+0 = v1?x=x?v1)
这意味着
Mx = (v1?x)Mv1 + (v2?x)Mv2
Mx = (v1?x)σ1u1+ (v2?x)σ2u2
记住dot product 操作可以用矩阵转置实现:
v?x = vTx
从而导出
Mx = u1σ1v1Tx +u2σ2v2Tx
M = u1σ1v1T +u2σ2v2T
上述表达式可以简写成
M = UΣVT
其中U 是由向量u1 和u2(作为列)组成的矩阵,Σ 是对角矩阵,对角线上的值是σ1 和σ2,V 是向量v1和v2(作为列)组成的矩阵. 矩阵V的上标T 代表V的矩阵转置。
上面显示了如何将矩阵M分解为三矩阵的积: V描述在domain中的规范正交基(orthonomal basis),U描述co-domain中的规范正交基,Σ描述在V中的向量在U中拉伸量。
译者注:
1. 如果把每个矩阵看作一种转换动作,可以描述为:先旋转,然后拉伸展,然后再一次旋转。
2.所以SVD的Idea是:如果我们在向量空间Rn 和Rm上选择正确的基(basis),每个mxn矩阵均可对角线化(diagonalized)。计算的问题就是如何找到这些basis。
奇异值分解的强大之处在于适用于任何矩阵。那我们是如何做到呢?让我们回顾前面的一个例子,在domain中加上一个单位圆。在co-domain中它将是椭圆,它的长轴(major axis)和短轴(minoraxis) 定义了在co-domain中的正交网格。
注意长轴短轴分别由Mv1和Mv2定义。因此这两个向量是单位圆上向量(在椭圆上的)最长和最短的向量。
换句话讲,单位圆上的函数|Mx| 在x=v1时有最大值,x=v2有最小值。这把问题降低到一个十分标准的微积分问题:我们希望在单位圆上优化一个函数。可以证明函数的临界点在矩阵MTM的特征向量上。因此这个矩阵是对称的,对应于不同的特征值的特征向量将是正交的。这就产生了一组向量vi。
奇异值定义为σi = |Mvi|, 向量ui则是Mvi方向上的单位向量。但是为什么这些ui是正交的呢?
要解释这个,我们假设σi and σj 是两个不同的奇异值。于是有
Mvi = σiui
Mvj = σjuj
让我们先看表达式Mvi?Mvj。 为了方便先假设它们的奇异值是非零的。另外一方面,vi和vj是对称矩阵MTM的特征向量,它们是相互正交的,结果是这个表达式等于零。
Mvi?Mvj =viTMTMvj = vi?MTMvj =vi?λjvj = λjvi?vj =0.
另外一方面,我们有
Mvi?Mvj =σiσjui?uj =0
因此ui和uj是正交的。到此为止,我们发现了一组正交向量vi,它能转换为另外一组正交向量ui。(vi对应的)奇异值描述了在不同方向上的拉伸程度。
在实际应用中,这不是为矩阵寻找奇异值分解的过程,因为这种方法效率不高,或者说数值计算上是低效的。
让我们看一矩阵:
这个矩阵在几何上的效果如下图:
在这种情况下,第二个奇异值是0,因此我们写成
M = u1σ1v1T.
(译者注:M = u1σ1 v1T+ u2σ2 v2T)
换句话讲,如果其中的一些奇异值是0,对应的项就不出现在M的分解中。这样,我们发现M的rank(矩阵秩,它等于线性转换后的维度)就等于非0奇异值的数量。
奇异值分解能让数据表示更加有效。例如,我们想传输以下图片,含15x25个黑或白的像素点。
因为图片中只有三种列,就像下图显示的,也许我们能用更加紧凑的形式。
我们用0代表黑色,1代表白色,用一个15x25的矩阵表示这个图像。如此一来,便有了375个元素的矩阵:
如果我们对上述M作奇异值分解,会发现只有三个非0的奇异值
σ1 = 14.72
σ2 = 5.22
σ3 = 3.31
因此,矩阵可表示为:
M=u1σ1v1T +u2σ2v2T + u3σ3v3T
这意味着我们有:三个向量vi,每个有15 个元素;三个向量ui,每个有25个元素;三个奇异值σi。这意味着我们能只用123个数字代表矩阵(15*3+25*3+3=123),而不是375个。就这样奇异值分解帮助我们发现了矩阵中存在的冗余,并提供了剔除它们的方法。
为什么只有三个非零的奇异值呢?前面讲过,非0奇异值的数量等于矩阵的rank。在这个例子中,矩阵只有三个线性独立的列,也就是它的rank=3。
前面的例子显示我们是如何利用“很多奇异值是0”来解决问题的。通常大的奇异值对应着有趣信息多的所在。比如,设想我们用一个扫描仪把这个图像输入到电脑。但是,扫描仪在图像中引入了一些非理想的数据(通常称为“噪音”)。
与前面的例子一样我们用15x25的矩阵表示数据,然后进行奇异值分解。可发现以下奇异值
σ1 = 14.15
σ2= 4.67
σ3= 3.00
σ4= 0.21
σ5= 0.19
...
σ15= 0.05
显然,前三个是最重要的(最大),我们可以假设其他小的奇异值是噪音造成的,所以近似表示矩阵如下
M u1σ1v1T +u2σ2v2T+u3σ3v3T
这导致了以下改进的图像。
在收集数据的时候会遇到噪音数据:无论如何好的器材,测量经常会有误差。因为大的奇异值(singular values)对应了矩阵中的重要特性。因此一旦数据收集完成,便自然可用SVD来研究。
例如,我们收集了以下数据
我们可能会把这些数据放到一个矩阵中
-1.03 0.74 -0.02 0.51 -1.31 0.99 0.69 -0.12 -0.72 1.11
-2.23 1.61 -0.02 0.88 -2.39 2.02 1.62 -0.35 -1.67 2.46
然后运行SVD,我们发现如下奇异值
σ1 = 6.04
σ2 = 0.22
其中一个奇异值如此之大,可以安全地假设小的σ2 是由于数据噪音引起的,这个奇异值在理想情况下应该是0。在这则案例中,矩阵的rank 等于1,意味着所有数据应该在向量ui定义的这条线上。
这个简单的例子说出了PCA(principal component analysis)起源,它是一组使用奇异值剔除数据中依赖和冗余的技术。
同样,SVD可用于检测数据中的存在的分组(group)。这就可以解释,为什么SVD正用于改进netflix的电影推荐系统。系统会根据你的电影评分(观看过的),把你分到某个组中,组内人员的评分与你的相似,然后系统就向你推荐组内其他人评分高的电影。
Todd Will的动画级版本的
Introductionto the Singular Value Decomposition
http://websites.uwlax.edu/twill/svd/index.html
优点是从基础的知识讲起,更加简单和形象。适合看不懂以上文章的人!
标签:svd
原文地址:http://blog.csdn.net/zzminer/article/details/41080267