SVD分解
2015-12-31 11:10
183 查看
原文:We recommend a singular value decomposition
关于线性变换部分的一些知识可以猛戳这里 奇异值分解(SVD) — 线性变换几何意义
一、奇异值分解( The singular value decomposition )
该部分是从几何层面上去理解二维的SVD:对于任意的2x2矩阵,通过SVD可以将一个相互垂直的网格(orthogonal grid)变换到另外一个相互垂直的网格。
我们可以通过向量的方式来描述这个事实: 首先,选择两个相互正交的单位向量v1v_1和v2v_2, 向量Mv1Mv_1 和Mv2Mv_2正交。
![](http://img.blog.csdn.net/20151231092159574)
u1u_1和u2u_2分别表示Mv1Mv_1 和Mv2Mv_2的单位向量,σ1∗u1=Mv1\sigma_1*u_1=Mv_1和σ2∗u2=Mv2\sigma_2*u_2= Mv_2。σ1\sigma_1和σ2\sigma_2分别表示这两个不同方向向量u1u_1和u2u_2上的模,也称作为矩阵 M 的奇异值。
![](http://img.blog.csdn.net/20151231092244449)
这样我们就有了如下关系式
Mv1=σ1∗u1Mv_1=\sigma_1*u_1
Mv2=σ2∗u2Mv_2=\sigma_2*u_2
我们现在可以简单描述下经过MM线性变换后的向量xx的表达形式。由于向量v1v_1和v2v_2是正交的单位向量,我们可以得到如下式子:
x=<v1,x>v1+<v2,x>v2x=v_1+v_2
这就意味着:
Mx=<v1,x>Mv1+<v2,x>Mv2Mx=Mv_1+Mv_2
Mx=<v1,x>σ1u1+<v2,x>σ2u2Mx=\sigma_1u_1+\sigma_2u_2
向量内积可以用向量的转置来表示,如下所示
<v,x>=vTx=v^Tx
最终的式子为
Mx=u1σ1vT1x+u2σ2vT2xMx=u_1\sigma_1v_1^Tx+u_2\sigma_2v_2^Tx
M=u1σ1vT1+u2σ2vT2M=u_1\sigma_1v_1^T+u_2\sigma_2v_2^T
上述的式子经常表示成
M=UΣVTM = UΣV^T
UU矩阵的列向量分别是u1,u2u_1,u_2,ΣΣ 是一个对角矩阵,对角元素分别是对应的σ1σ_1和σ2σ_2,VV矩阵的列向量分别是v1,v2v_1,v_2。上角标T表示矩阵VV的转置。
这就表明任意的矩阵MM是可以分解成三个矩阵。VV表示了原始域的标准正交基,UU表示经过MM变换后的co-domain的标准正交基,ΣΣ表示了VV中的向量与UU中 相对应向量之间的关系。(V describes an orthonormal basis in the domain, and U describes an orthonormal basis in the co-domain, and Σ describes how much the vectors in V are stretched to give the vectors in U.)
如何获得奇异值分解?( How do we find the singular decomposition? )
事实上我们可以找到任何矩阵的奇异值分解,那么我们是如何做到的呢?假设在原始域中有一个单位圆,如下图所示。经过MM矩阵变换以后在co-domain中单位圆会变成一个椭圆,它的长轴Mv1Mv_1和短轴Mv2Mv_2分别对应转换后的两个标准正交向量,也是在椭圆范围内最长和最短的两个向量。
![](http://img.blog.csdn.net/20151231092353420)
换句话说,定义在单位圆上的函数|Mx||Mx|分别在v1v_1和v2v_2方向上取得最大和最小值。这样我们就把寻找矩阵的奇异值分解过程缩小到了优化函数|Mx||Mx|上了。结果发现(具体的推到过程这里就不详细介绍了)这个函数取得最优值的向量分别是矩阵MTMM^TM的特征向量。由于MTMM^TM是对称矩阵,因此不同特征值对应的特征向量都是互相正交的,我们用viv_i表示MTMM^TM的所有特征向量。奇异值σi=|Mvi|σ_i=|Mv_i|,向量uiu_i为MviMv_i方向上的单位向量。但为什么uiu_i也是正交的呢?
推导如下:
σiσ_i和σjσ_j分别是不同两个奇异值
Mvi=σi∗uiMv_i=\sigma_i*u_i
Mvj=σj∗ujMv_j=\sigma_j*u_j
我们先看下<Mvi,Mvj>,并假设它们分别对应的奇异值都不为零。一方面这个表达的值为0,推导如下
<Mvi,Mvj>=vTiMTMvj>=λjvTivj=0=v_i^TM^TMv_j>=\lambda_jv_i^Tv_j=0
另一方面,我们有
<Mvi,Mvj>=σiσj<ui,uj>=0=\sigma_i\sigma_j=0
因此,uiu_i和uju_j是正交的。但实际上,这并非是求解奇异值的方法,效率会非常低。这里也主要不是讨论如何求解奇异值,为了演示方便,采用的都是二阶矩阵。
二、应用实例(Another example)
现在我们来看几个实例。
实例一
![](http://img.blog.csdn.net/20151231092446796)
经过这个矩阵变换后的效果如下图所示
![](http://img.blog.csdn.net/20151231092517828)
在这个例子中,第二个奇异值为 0,因此经过变换后只有一个方向上有表达。
M=u1σ1vT1M=u_1σ_1v_1^T.
换句话说,如果某些奇异值非常小的话,其相对应的几项就可以不同出现在矩阵MM的分解式中。因此,我们可以看到矩阵MM的秩的大小等于非零奇异值的个数。
实例二
我们来看一个奇异值分解在数据表达上的应用。假设我们有如下的一张15x25的图像数据。
![](http://img.blog.csdn.net/20151231092553757)
如图所示,该图像主要由下面三部分构成。
![](http://img.blog.csdn.net/20151231092631723)
我们将图像表示成15x25的矩阵,矩阵的元素对应着图像的不同像素,如果像素是白色的话,就取 1,黑色的就取0. 我们得到了一个具有375个元素的矩阵,如下图所示
![](http://img.blog.csdn.net/20151231092714122)
如果我们对矩阵M进行奇异值分解以后,得到奇异值分别是
σ1=14.72σ_1=14.72
σ2=5.22σ_2=5.22
σ3=3.31σ_3=3.31
矩阵MM就可以表示成
M=u1σ1vT1+u2σ2vT2+u3σ3vT3M=u_1σ_1v_1^T+u_2σ_2v_2^T+u_3σ_3v_3^T
viv_i具有15个元素,uiu_i具有25个元素,σiσ_i对应不同的奇异值。如上图所示,我们就可以用123个元素来表示具有375个元素的图像数据了。
实例三
减噪(noise reduction)
前面的例子的奇异值都不为零,或者都还算比较大,下面我们来探索一下拥有零或者非常小的奇异值的情况。通常来讲,大的奇异值对应的部分会包含更多的信息。比如,我们有一张扫描的,带有噪声的图像,如下图所示
![](http://img.blog.csdn.net/20151231092749517)
我们采用跟实例二相同的处理方式处理该扫描图像。得到图像矩阵的奇异值:
σ1=14.15σ_1=14.15
σ2=4.67σ_2=4.67
σ3=3.00σ_3=3.00
σ4=0.21σ_4=0.21
σ5=0.19σ_5=0.19
…
σ15=0.05σ_15=0.05
很明显,前面三个奇异值远远比后面的奇异值要大,这样矩阵MM的分解方式就可以如下:
M=u1σ1vT1+u2σ2vT2+u3σ3vT3M=u_1σ_1v_1^T+u_2σ_2v_2^T+u_3σ_3v_3^T
经过奇异值分解后,我们得到了一张降噪后的图像。
![](http://img.blog.csdn.net/20151231092826152)
实例四
数据分析(data analysis)
我们搜集的数据中总是存在噪声:无论采用的设备多精密,方法有多好,总是会存在一些误差的。如果你们还记得上文提到的,大的奇异值对应了矩阵中的主要信息的话,运用SVD进行数据分析,提取其中的主要部分的话,还是相当合理的。
作为例子,假如我们搜集的数据如下所示:
![](http://img.blog.csdn.net/20151231092858399)
我们将数据用矩阵的形式表示:
[-1.03,0.74,-0.02,0.51,-0.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]
经过奇异值分解后,得到
σ1=6.04σ_1=6.04
σ2=0.22σ_2=0.22
由于第一个奇异值远比第二个要大,数据中有包含一些噪声,第二个奇异值在原始矩阵分解相对应的部分可以忽略。经过SVD分解后,保留了主要样本点如图所示
就保留主要样本数据来看,该过程跟PCA( principal component analysis)技术有一些联系,PCA也使用了SVD去检测数据间依赖和冗余信息.
总结(Summary)
这篇文章非常的清晰的讲解了SVD的几何意义,不仅从数学的角度,还联系了几个应用实例形象的论述了SVD是如何发现数据中主要信息的。在 netflix prize中许多团队都运用了矩阵分解的技术,该技术就来源于SVD的分解思想,矩阵分解算是SVD的变形,但思想还是一致的。之前算是能够运用矩阵分解 技术于个性化推荐系统中,但理解起来不够直观,阅读原文后醍醐灌顶,我想就从SVD能够发现数据中的主要信息的思路,就几个方面去思考下如何利用数据中所 蕴含的潜在关系去探索个性化推荐系统。也希望路过的各位大侠不吝分享呀。
References:
Gilbert Strang, Linear Algebra and Its Applications. Brooks Cole
William H. Press et al, Numercial Recipes in C: The Art of Scientific Computing. Cambridge University Press.
Dan Kalman, A Singularly Valuable Decomposition: The SVD of a Matrix, The College Mathematics Journal 27(1996), 2-23.
If You Liked This, You’re Sure to Love That, The New York Times, November 21, 2008.
扩展:
http://blog.jobbole.com/88208/
关于线性变换部分的一些知识可以猛戳这里 奇异值分解(SVD) — 线性变换几何意义
一、奇异值分解( The singular value decomposition )
该部分是从几何层面上去理解二维的SVD:对于任意的2x2矩阵,通过SVD可以将一个相互垂直的网格(orthogonal grid)变换到另外一个相互垂直的网格。
我们可以通过向量的方式来描述这个事实: 首先,选择两个相互正交的单位向量v1v_1和v2v_2, 向量Mv1Mv_1 和Mv2Mv_2正交。
u1u_1和u2u_2分别表示Mv1Mv_1 和Mv2Mv_2的单位向量,σ1∗u1=Mv1\sigma_1*u_1=Mv_1和σ2∗u2=Mv2\sigma_2*u_2= Mv_2。σ1\sigma_1和σ2\sigma_2分别表示这两个不同方向向量u1u_1和u2u_2上的模,也称作为矩阵 M 的奇异值。
这样我们就有了如下关系式
Mv1=σ1∗u1Mv_1=\sigma_1*u_1
Mv2=σ2∗u2Mv_2=\sigma_2*u_2
我们现在可以简单描述下经过MM线性变换后的向量xx的表达形式。由于向量v1v_1和v2v_2是正交的单位向量,我们可以得到如下式子:
x=<v1,x>v1+<v2,x>v2x=v_1+v_2
这就意味着:
Mx=<v1,x>Mv1+<v2,x>Mv2Mx=Mv_1+Mv_2
Mx=<v1,x>σ1u1+<v2,x>σ2u2Mx=\sigma_1u_1+\sigma_2u_2
向量内积可以用向量的转置来表示,如下所示
<v,x>=vTx=v^Tx
最终的式子为
Mx=u1σ1vT1x+u2σ2vT2xMx=u_1\sigma_1v_1^Tx+u_2\sigma_2v_2^Tx
M=u1σ1vT1+u2σ2vT2M=u_1\sigma_1v_1^T+u_2\sigma_2v_2^T
上述的式子经常表示成
M=UΣVTM = UΣV^T
UU矩阵的列向量分别是u1,u2u_1,u_2,ΣΣ 是一个对角矩阵,对角元素分别是对应的σ1σ_1和σ2σ_2,VV矩阵的列向量分别是v1,v2v_1,v_2。上角标T表示矩阵VV的转置。
这就表明任意的矩阵MM是可以分解成三个矩阵。VV表示了原始域的标准正交基,UU表示经过MM变换后的co-domain的标准正交基,ΣΣ表示了VV中的向量与UU中 相对应向量之间的关系。(V describes an orthonormal basis in the domain, and U describes an orthonormal basis in the co-domain, and Σ describes how much the vectors in V are stretched to give the vectors in U.)
如何获得奇异值分解?( How do we find the singular decomposition? )
事实上我们可以找到任何矩阵的奇异值分解,那么我们是如何做到的呢?假设在原始域中有一个单位圆,如下图所示。经过MM矩阵变换以后在co-domain中单位圆会变成一个椭圆,它的长轴Mv1Mv_1和短轴Mv2Mv_2分别对应转换后的两个标准正交向量,也是在椭圆范围内最长和最短的两个向量。
换句话说,定义在单位圆上的函数|Mx||Mx|分别在v1v_1和v2v_2方向上取得最大和最小值。这样我们就把寻找矩阵的奇异值分解过程缩小到了优化函数|Mx||Mx|上了。结果发现(具体的推到过程这里就不详细介绍了)这个函数取得最优值的向量分别是矩阵MTMM^TM的特征向量。由于MTMM^TM是对称矩阵,因此不同特征值对应的特征向量都是互相正交的,我们用viv_i表示MTMM^TM的所有特征向量。奇异值σi=|Mvi|σ_i=|Mv_i|,向量uiu_i为MviMv_i方向上的单位向量。但为什么uiu_i也是正交的呢?
推导如下:
σiσ_i和σjσ_j分别是不同两个奇异值
Mvi=σi∗uiMv_i=\sigma_i*u_i
Mvj=σj∗ujMv_j=\sigma_j*u_j
我们先看下<Mvi,Mvj>,并假设它们分别对应的奇异值都不为零。一方面这个表达的值为0,推导如下
<Mvi,Mvj>=vTiMTMvj>=λjvTivj=0=v_i^TM^TMv_j>=\lambda_jv_i^Tv_j=0
另一方面,我们有
<Mvi,Mvj>=σiσj<ui,uj>=0=\sigma_i\sigma_j=0
因此,uiu_i和uju_j是正交的。但实际上,这并非是求解奇异值的方法,效率会非常低。这里也主要不是讨论如何求解奇异值,为了演示方便,采用的都是二阶矩阵。
二、应用实例(Another example)
现在我们来看几个实例。
实例一
经过这个矩阵变换后的效果如下图所示
在这个例子中,第二个奇异值为 0,因此经过变换后只有一个方向上有表达。
M=u1σ1vT1M=u_1σ_1v_1^T.
换句话说,如果某些奇异值非常小的话,其相对应的几项就可以不同出现在矩阵MM的分解式中。因此,我们可以看到矩阵MM的秩的大小等于非零奇异值的个数。
实例二
我们来看一个奇异值分解在数据表达上的应用。假设我们有如下的一张15x25的图像数据。
如图所示,该图像主要由下面三部分构成。
我们将图像表示成15x25的矩阵,矩阵的元素对应着图像的不同像素,如果像素是白色的话,就取 1,黑色的就取0. 我们得到了一个具有375个元素的矩阵,如下图所示
如果我们对矩阵M进行奇异值分解以后,得到奇异值分别是
σ1=14.72σ_1=14.72
σ2=5.22σ_2=5.22
σ3=3.31σ_3=3.31
矩阵MM就可以表示成
M=u1σ1vT1+u2σ2vT2+u3σ3vT3M=u_1σ_1v_1^T+u_2σ_2v_2^T+u_3σ_3v_3^T
viv_i具有15个元素,uiu_i具有25个元素,σiσ_i对应不同的奇异值。如上图所示,我们就可以用123个元素来表示具有375个元素的图像数据了。
实例三
减噪(noise reduction)
前面的例子的奇异值都不为零,或者都还算比较大,下面我们来探索一下拥有零或者非常小的奇异值的情况。通常来讲,大的奇异值对应的部分会包含更多的信息。比如,我们有一张扫描的,带有噪声的图像,如下图所示
我们采用跟实例二相同的处理方式处理该扫描图像。得到图像矩阵的奇异值:
σ1=14.15σ_1=14.15
σ2=4.67σ_2=4.67
σ3=3.00σ_3=3.00
σ4=0.21σ_4=0.21
σ5=0.19σ_5=0.19
…
σ15=0.05σ_15=0.05
很明显,前面三个奇异值远远比后面的奇异值要大,这样矩阵MM的分解方式就可以如下:
M=u1σ1vT1+u2σ2vT2+u3σ3vT3M=u_1σ_1v_1^T+u_2σ_2v_2^T+u_3σ_3v_3^T
经过奇异值分解后,我们得到了一张降噪后的图像。
实例四
数据分析(data analysis)
我们搜集的数据中总是存在噪声:无论采用的设备多精密,方法有多好,总是会存在一些误差的。如果你们还记得上文提到的,大的奇异值对应了矩阵中的主要信息的话,运用SVD进行数据分析,提取其中的主要部分的话,还是相当合理的。
作为例子,假如我们搜集的数据如下所示:
我们将数据用矩阵的形式表示:
[-1.03,0.74,-0.02,0.51,-0.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]
经过奇异值分解后,得到
σ1=6.04σ_1=6.04
σ2=0.22σ_2=0.22
由于第一个奇异值远比第二个要大,数据中有包含一些噪声,第二个奇异值在原始矩阵分解相对应的部分可以忽略。经过SVD分解后,保留了主要样本点如图所示
就保留主要样本数据来看,该过程跟PCA( principal component analysis)技术有一些联系,PCA也使用了SVD去检测数据间依赖和冗余信息.
总结(Summary)
这篇文章非常的清晰的讲解了SVD的几何意义,不仅从数学的角度,还联系了几个应用实例形象的论述了SVD是如何发现数据中主要信息的。在 netflix prize中许多团队都运用了矩阵分解的技术,该技术就来源于SVD的分解思想,矩阵分解算是SVD的变形,但思想还是一致的。之前算是能够运用矩阵分解 技术于个性化推荐系统中,但理解起来不够直观,阅读原文后醍醐灌顶,我想就从SVD能够发现数据中的主要信息的思路,就几个方面去思考下如何利用数据中所 蕴含的潜在关系去探索个性化推荐系统。也希望路过的各位大侠不吝分享呀。
References:
Gilbert Strang, Linear Algebra and Its Applications. Brooks Cole
William H. Press et al, Numercial Recipes in C: The Art of Scientific Computing. Cambridge University Press.
Dan Kalman, A Singularly Valuable Decomposition: The SVD of a Matrix, The College Mathematics Journal 27(1996), 2-23.
If You Liked This, You’re Sure to Love That, The New York Times, November 21, 2008.
扩展:
http://blog.jobbole.com/88208/
相关文章推荐
- layer设置UIImageView圆形不圆的问题
- 重置CISCO 2911SEC/K9路由器密码
- Android Sqlite命令详解(基本命令)
- 第八届河南省赛 zzuoj 10408: C.最少换乘 (djs&&字符串转数字)
- Ubuntu修改文件关联
- JavaWeb Filter 的执行顺序
- iOS日期选择器(UIDatePicker)
- git push.default Update were rejected because a pushed branch tip is behand remote
- js在页面显示当前时间、日期
- 设置当前进程的区域语言
- IOS-整体框架类图
- Ubuntu修改文件关联
- Android ListView+RadioButton实现单选的方法
- 求JS无预览打印解决方案
- HTML, SDML, XML
- 一般报java.lang.NullPointerException的原因有以下几种
- java之模块学习-JAVA的IO流
- 定位CLLocationManager
- Log4j学习
- 2014年的六级考试即将来临,你们准备好了吗?