svd奇异值分解_传统推荐算法(一)SVD推荐(1)解读奇异值分解

文章目录

  • 写在前面
  • 1. 从几何变换到奇异值分解
  • 2. 代数角度理解奇异值与奇异向量
    • 2.1 从正交基映射推导SVD
    • 2.2 特征值分解求解奇异值和奇异向量
      • 2.2.1 求解过程
      • 2.2.2 推论
    • 2.3 SVD的另一种形式
  • 3. 几何角度理解奇异值与奇异向量
    • 3.1 从坐标变换理解
      • 3.1.1 从例子到一般
      • 3.1.2 两个问题
    • 3.2 形变的角度理解奇异值
  • 4. 我觉得的最好的奇异值解读
  • 5. 特征值分解和奇异值分解区别
  • 6. 奇异值分解在PCA中的应用
  • 参考文献

写在前面

读完本篇文章后,你应该可以知道:

奇异值分解到底是什么?
奇异值和奇异向量有什么代数意义?
奇异值和奇异向量有什么几何意义?
如何利用特征值分解求奇异值和奇异向量?
奇异值的个数如何确定?
奇异值分解是否唯一?
奇异值分解什么时候和特征值分解相等?
奇异值分解和特征值分解的区别?

1. 从几何变换到奇异值分解

这部分的内容是[1]中部分内容的翻译,这几张图片大家应该见过很多次。

来看一个二维平面坐标系的例子,在由(1,0)T和(0,1)T确定的二维平面坐标系中:

f7a6be8ba1055dda9ab65f79d009a4f1.png

向量(x,y)T左乘M矩阵,将会得到一个新的向量(新的点)。为了更容易理解变换过程,我们主要关注向量(1,1)T和(1,0)T,(0,1)T,(0,0)T围城的矩形的形变过程。

abc716177a3bbd754b9feacfbde59354.png

左乘矩阵M的效果在坐标系中的表现如下:

6d2341ea50b065ccf9111cf7abd9bb49.png

直接从图上看不出什么,我们把原先的坐标系逆时针旋转30度,然后左乘M看看效果:

c2cd8d6078cd7694052907370a0d4347.png

好像也没什么特殊的,把原先的坐标系逆时针旋转60度看看:

a6850a9b7484a750b9502c4856e86563.png

右边的网格几乎快要正交了,也就是说,原先的正交基逆时针旋转60度后,再经过M变换,几乎可以得到一组新的正交基。

实际上,如果我们把坐标轴逆时针旋转58.28度,就会得到如下效果:

1260d2116d90ea8a91052dce5dbfec44.png

从几何上看,旋转后的正交基(1,0)T和(0,1)T,在经过M变换后,得到了另外一组正交基。这其实就是SVD分解的一种解释,即M可以将一组正交基映射到另一组正交基。

efb34e5bf879864df35fa38055d4d563.png

记映射后的向量Mv1为u1,Mv2为u2,Mv1的模为σ1,Mv2的模为σ2。

140464e8b30b47392587dda108c4d6c7.png

接下来我们就可以推导了:

70e90450db2454af757d22cd222dd5f1.png

在v1和v2确定的二维平面中,任意一点x可以表示为:

6efb8777586fc0bc2cafe1d64c3c5e0c.png

在《利用SVD进行推荐(1)矩阵相乘的本质》中我们讲过,小括号里的点积就是x在v1和v1坐标轴上的投影值(坐标)。我们对这个平面中任意一点x左乘矩阵M进行变换,来看看结果:

5c37b8aa2f5f4f343fa344995fd39112.png

向量点积表示为矩阵乘法就是:

d154e51580f0b3e4c65d8951b12c4de1.png

所以变换结果可以进一步推演为:

2db4b3472a4907357e96febb9fab26d8.png

我们得到了M有关u,v,σ的表达式。将表达式转为矩阵表达形式,即为:

86cbdd6b82270d9079a114759ca74475.png

其中U中的每一列向量ui为映射后的一个单位基向量,V中的每一个列向量vj为原先被映射的单位基向量。这里的推导过于简略,下面我们看看更为严格的推导。


2. 代数角度理解奇异值与奇异向量

奇异值分解在代数上表现就是A将一组正交基转化为另一组正交基。我们来看一下具体推导。

2.1 从正交基映射推导SVD

2.1内容主要来自[5],靖王你真帅!

假设找到了这样一组正交基:

64b63aac8eac09b366c18b68ef2f1375.png

而mxn的实矩阵A将其映射为:

6618fbd546eb4f16e0d207069a38cd16.png

我们要使他们两两正交,也就是:

8bfa8a1b21b0ae04d1fae33214a0a7e5.png

根据假设,有:

ff1e20e665305919a23b09f30adea936.png

在这种情况下,如果取vi为AT的特征向量的话,那么就有:

5248d4ed9c4518c59cb9188b2d0ec045.png

这样我们就找到了正交基使其映射后还是正交基了。现在我们将映射后的正交基单位化。因为:

5b03fe062377001967bea0d462427ad6.png

也就是:

bf11b937767c1b4dd276bdc276788bf9.png

所以取单位向量为:

9c674321ae5150c9bf918fd9a408f9bb.png

由此可得:

8b814ea8dae093e0adcf283f9a52d3d6.png

从上述公式来看,左奇异向量ui是映射后正交基的单位化形式,奇异值σi就是映射后的正交基的模的大小,而右奇异向量vi就是被映射的正交基。此处也可以看出奇异值一定非负(当然本身的定义就是这样)。

当k < i < m时,对u1,u2,…,uk进行扩展u(k+1),…,um,使得u1,u2,…,um为m维空间中的一组正交基,即:

ffb1a490712133407a3809943cf05ae0.png

同样的,对v1,v2,…,vk进行扩展v(k+1),…,vn(这n-k个向量存在于A的零空间中,即Ax=0的解空间的基),使得v1,v2,…,vn为n维空间中的一组正交基,即:

380014f1fb48bfbfeaced91fc4b0c956.png

然后我们就可以得到:

4b5bed42814bc7f327f15b93a3aa5623.png

从而A的SVD分解为:

e5daf08fbb00b3abe723ece5779c0017.png

088ef77772de700a2717f336f32d365a.png

根据论文[3]的分析,任意mxn的实矩阵A=UΣVT,都可以看成一种线性转化, 从n维空间到m维空间的转化。n维空间和m维空间分别由V和U的列向量所形成的基向量确定。

2.2 特征值分解求解奇异值和奇异向量

2.2.1 求解过程

对任意mxn实矩阵A的奇异值分解A=

,有:

这不就是特征值分解吗。也就是说
的特征向量,其对应的特征值是
,同理
的特征向量,其对应的特征值也是
。可以从这个角度出发求解特征值和特征向量。

实际上,对于mxn维的实矩阵A,

都是半正定的实对称矩阵(特征值为非负数),且具有相同的非零特征值。且k=rank(
)=rank(
)=rank(A)
[4]显然实对称矩阵的秩就是非零特征值的个数。因此这两个实对称矩阵有k个相同的非零特征值。当i>rank(A)即使有特征值也全是0。

这里的分析还可以解释2.1中对角阵S上的i为什么最多取到k=rank(A),假设可以取到k+1,按照本节中的推导,奇异值

是找不到对应的非零特征值的,显然
=0。

或者说得专业些,

是实对称矩阵,存在n阶正交矩阵V,使得
相似于对角矩阵
(对角线上是
的全部特征值)。相似的矩阵有相同的特征多项式,进而有相同的特征值,当然秩更要相同了。所以r(S)=r(
)=r(
)=r(A)。即对角阵S非零奇异值的个数=
非零特征值的个数=对称矩阵
的秩=A的秩。

2.2.2 推论

好了我们可以总结下了,对于任意实矩阵A的奇异值分解,它的右奇异向量(V的列向量)是

的特征向量,它的左奇异向量(U的列向量)是
的特征向量,而奇异值是这两个对称矩阵相同的非零特征值的平方根(实际上它们两个非零特征值一模一样)。

SVD分解只告诉我们总是存在这样一个分解,并没有说这个分解是唯一的。很显然:特征值次序就可以不一样,显然SVD分解不唯一。但是我们常常把奇异值按照从大到小的顺序排列,这样S就可以由A唯一确定了。[7]和[8]告诉了我们SVD分解什么情况下是唯一的,感兴趣可以看看。

那什么时候SVD分解和特征值分解相等呢? [10]里面给出了一种说法:

111a7079f233afbcc36f2dfd49b6cc67.png

2.3 SVD的另一种形式

实矩阵A的奇异值分解

可以表示为:

1cfa28201f36b9d31c51efe32129d0ea.png

其中k=rank(A),即矩阵A的秩。参照2.2我们知

,这些奇异值和这两个对称矩阵的相同特征值是一一对应关系(平方根),显然k<=min(m,n)。

使用矩阵的分块乘法,得:

2c3540db3f3ae1a7e68af751e4d7b1fa.png

后面一项是0,所以可以化为:

acc8f1a56cbe293eacf4f6e694ab2a0b.png

如果我们令X为mxk的矩阵,Y为kxn的矩阵:

69958ff9b5711bacc4538cc32a6600ff.png

dfa6d9c21afbc029db2e65bd99723f27.png

那么A可以表示为:

21512cfefec4fb737bea975f325f31ec.png

我们把它展开为向量的外积形式,这就是SVD的另一种表达形式:

9c9c28405f87fa48e6e3bb3584402c12.png

那么向量x左乘矩阵A是什么呢?我们看看:

832021324fd1632568186b3c75e2ddb2.png

是个标量,所以有:

6db09ad646599ade4d4d20ee7a9ed69b.png

此时Ax已经表示成了

的线性组合,每一项线性系数是
的乘积,由矩阵乘法的本质可知,此时
可以看成x在V坐标系下
轴上的坐标。结论呼之欲出:在A的作用下,x由n维空间转化到了m维空间中。下一章我们将从空间几何的角度对这个转化进行理解。

3. 几何角度理解奇异值与奇异向量

3.1 从坐标变换理解

3.1.1 从例子到一般

我直接复制[9]中的一个例子过来,作者是西电的张剑湖大佬:

85cf87fcdc8cfc47b00d7852220d3469.png

81bc91f4d746dbc51976fb88a91bbaa7.png

f75ee26bfcedd7bee08534b74d1daf80.png

ea8f3ac0a26d9fae705dab94694311c1.png

7641cf118224713beb32462babeb3e9a.png

矩阵乘法的本质一文中提到过,向量左乘正交矩阵可以达到将向量旋转的效果。我们还看了一个2阶非对称方阵的实例,它的奇异值变换就是对向量进行旋转-缩放-旋转的过程。当时并没有讲维度变化这个细节。

我们对更一般的形式进行分析:从奇异值分解的角度出发,

就是x在V每个列向量所确定的轴进行投影,是先将x映射到V坐标系中(此时x维度和V确定的空间维度相同,也可以理解为
旋转x),然后缩放的同时将维度映射
坐标系表示的空间的维度,最后映射到
坐标系中(此时
坐标系维度相同,可以理解为
旋转)。

3.1.2 两个问题

第一个问题是,为什么不是在

中进行长度为
的伸缩,而在
坐标系中向量的模长却为
呢?

是这样的,拿v1举例吧,它太过特殊,在V坐标系中的投影坐标是(1,0,…,0)T。而Σ不仅把这个n维的进行了扩维,将n维的(1,0,…,0)T变为m维的(1,0,…,0),同时还进行了第一维度上长度为

的伸缩成为了(
,0,…,0)。

所以,在投影到

坐标系之前,v1已经转化成一个m空间的向量,它的模长就是
。而这个m维空间无论用哪组单位正交基来表示,只不过相当于对向量进行旋转换了方向,向量本身的模是不变的。

第二个问题是,如果如问题1所述,那为什么投影到

坐标系中,坐标值恰好与U中的基向量是对应的?

实际上在代数上就是这样没有为什么。从几何角度,我们还是在二维中进行分析吧。假设B点逆时针旋转θ度即为A点,顺时针θ度为C点。

,
坐标系和
,
坐标系就是U和
。现在对于B(
,0),我们要向
,
坐标系中投影,由其相对关系可知,其投影坐标值其实就相当于A点在x,y坐标系中的投影坐标值,也就是(cosθ,sinθ)T*

发现了吧,当v1乘以对角阵S维度扩展到m时,此时它的坐标是有一个默认的坐标系的,就如下图中的x,y坐标系。而U和

空间也如下图中关系所示,它们使用默认坐标系中的坐标来表示自己。在默认坐标系下x和y轴向的伸缩变换在
,
中的表示,就如同
,
坐标轴向的伸缩变换在x中的表示,当然使用
,
坐标轴的基向量的表示啊。

ea622aee692cdd1dfd02c94b9803e908.png

我们可以发现,对于x,y坐标系中的向量OB(

,0),无论是逆时针转到了坐标系
,
中变为(cosθ,sinθ)T*
,还是转到
,
坐标系中成为(cosθ,-sinθ)T*
,它的模是不变的。这与问题一是呼应的。

3.2 形变的角度理解奇异值

[2]中,马同学从翻绳游戏开始,对奇异值进行了生动形象的分析,[6]中7.4节也有形变的分析,还有相关例题。感兴趣的可以看一看。


4. 我觉得的最好的奇异值解读

在知乎问题"奇异值的物理意义是什么?"下,看到一位大牛对奇异值的解读[12],个人认为是对奇异值的一种最好的解读。感谢知乎用户“老鸡蛋”。

2747ac2d8e81498a805d04435b7bfffc.png

5. 特征值分解和奇异值分解区别

  • 适用条件 特征值分解必须是可对角化矩阵(所以必须是方阵。n阶方阵可对角化的定义是相似于一个对角矩阵,充要条件是A有n个线性无关的特征向量[11]),奇异值分解则适用于任意矩阵。
  • 特征值/奇异值个数 特征值个数与矩阵的秩没有必然关系,n阶实对称矩阵的非零特征值个数等于矩阵的秩;非零奇异值个数等于矩阵的秩。
  • 几何意义 关于几何意义之前讲的比较多,内容较多本文就不再赘述。[10]中对于奇异值分解的几何意义给出了一个很直观的讲法:

b947d99b701d641cea54245cbef1a4f0.png

6. 奇异值分解在PCA中的应用

在"利用SVD进行推荐(2)特征值与特征向量的直观理解"中我们讲过,对于样本A,PCA的计算过程就是计算协方差矩阵

,然后求前k个最大特征值对应的特征向量得到投影矩阵,从而达到降维的目的。当样本非常多的时候,计算协方差矩阵,还要进行特征值分解,这个计算量挺大的。

我们发现SVD分解

中,左奇异向量
不就是
的特征向量吗?那我们就可以利用SVD分解来计算投影矩阵了。

[13]中Pinard大神说,有些SVD分解算法可以不用求

而直接得到A的右奇异矩阵V,也就是可以直接得到U(
的右奇异矩阵是U),那这就很nice了。

参考文献

[1] http://www.ams.org/publicoutreach/feature-column/fcarc-svd
[2] https://www.matongxue.com/madocs/306.html
[3] http://www-users.math.umn.edu/~lerman/math5467/svd.pdf
[4] 张绍飞. 矩阵论教程.第2版[M]. 2012.
[5]https://blog.csdn.net/zhongkejingwang/article/details/43053513
[6] Lay D , Lay. 线性代数及其应用[M]. 机械工业出版社, 2017.
[7] http://rakaposhi.eas.asu.edu/s10-cse494-mailarchive/msg00030.html
[8] https://math.stackexchange.com/questions/644327/how-unique-are-u-and-v-in-the-singular-value-decomposition
[9] https://wenku.baidu.com/view/389fabcebceb19e8b8f6ba97.html
[10] https://www.zhihu.com/question/49959130
[11] 申亚男, 张晓丹, 李为东. 线性代数.第2版[M]. 机械工业出版社, 2015.
[12] https://www.zhihu.com/question/22237507
[13] https://www.cnblogs.com/pinard/p/6251584.html

更多精彩内容请移步公众号:推荐算法工程师

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/537244.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

信息化项目WBS实战总结

概述 前面花了几个篇幅讲解了WBS&#xff0c;这篇文章总结下实战要点。 第一篇&#xff1a;项目中的WBS分解 第二篇&#xff1a;项目的可交付成果 第三篇&#xff1a;WBS工作包 第四篇&#xff1a;WBS结果输出表 划重点 1.WBS是对“可交付成果”的分解&#xff0c;可交付…

kafka 支持发布订阅

概述 一般消息队列的是实现是支持两种模式的&#xff0c;即点对点&#xff0c;还有一种是topic发布订阅者模式&#xff0c;比如ACTIVEMQ。KAFKA也支持这两种模式&#xff0c;但是实现的原理不一样。 KAFKA 的消息被读取后&#xff0c;并不是马上删除&#xff0c;这样就可以重复…

svn管理工具_主流代码管理工具深度评测

引言 作为有十几年IT行业代码的从业人员&#xff0c;经历过代码管理工具的变迁&#xff0c;从早期的微软的Source Code Control&#xff0c;到TFS&#xff0c;再到SVN&#xff0c;再到现在的Git。我深知代码管理工具是代码开发过程中非常重要的工具。市场上的代码管理工具有很多…

假设条件和制约因素的理解

目录 假设条件 制约因素 假设条件和制约因素都记录在假设日志中。 假设条件 假设条件是指当前不能确定的、未经验证但仍被视为正确、真实或确定的因素。 假设条件存在不确定性&#xff0c;影响项目规划的所有方面&#xff1b;项目实施过程中假设条件一旦不成立就可能造成相…

深入理解Java的三种工厂模式

一、简单工厂模式简单工厂的定义&#xff1a;提供一个创建对象实例的功能&#xff0c;而无须关心其具体实现。被创建实例的类型可以是接口、抽象类&#xff0c;也可以是具体的类实现汽车接口public interface Car {String getName();}奔驰类public class Benz implements Car {…

项目管理PMBOK中的八大会议

目录 一、项目启动会 initiating meeting 二、项目开踢会议 kick-off meeting 三/四&#xff1a;焦点小组会议&引导式研讨会 五、规划会议与分析 六、状态审查会 七、投标人会议 八、项目经验总结会 一、项目启动会 initiating meeting 1、召开时间&#xff1a;是启…

python函数的继承_Python 继承

版权所有&#xff0c;未经许可&#xff0c;禁止转载Python 继承继承允许我们在定义一个类时&#xff0c;让该类继承另一个类的所有方法和属性。父类是被继承的类&#xff0c;也称为基类。子类是继承父类的类&#xff0c;也称为派生类。创建父类任何类都可以是父类&#xff0c;创…

MySQL 使用Node.js异步查询结果为undefined的简单处理办法

//定义查询过程,化异步为同步 function name(SQL_TXT, Respond) {ExecuteSQL(1, SQL_TXT);var i 0;var SetName setInterval(function () {if (i > 19) {clearInterval(SetName);}console.log("Tqr :第" i "次 obtain , Value : \n" Tqr " \…

python中的装饰器怎么运行_Python 装饰器入门(上)

翻译前想说的话:这是一篇介绍python装饰器的文章&#xff0c;对比之前看到的类似介绍装饰器的文章&#xff0c;个人认为无人可出其右&#xff0c;文章由浅到深&#xff0c;由函数介绍到装饰器的高级应用&#xff0c;每个介绍必有例子说明。文章太长&#xff0c;看完原文后我计划…

我的2018

写在开始 2018年以飞快的速度临近尾声了&#xff0c;只感慨时间过得真快&#xff01; 这一年过得算是平平淡淡&#xff0c;没有比较特别的地方。 工作 从去年8月来到这公司&#xff0c;是个做旅游产品的互联网公司&#xff0c;平时里做的事可以说是很简单&#xff0c;我只能说&…

IntelliJ IDEA快捷键总结

搜索类快捷键 快捷键描述Ctrl F文件内查找字符串Ctrl Shift F按照文本的内容查找双击Shift查找任何内容&#xff0c;可搜索类、资源、配置项、方法等&#xff0c;还能搜索路径Ctrl Shift R全局资源查找和替换Ctrl N按类名搜索类&#xff0c;比如 Java&#xff0c;Groovy…

python小波分析法检测火焰_一种基于小波分析的网络流量异常检测方法

一种基于小波分析的网络流量异常检测方法杜臻;马立鹏;孙国梓【期刊名称】《计算机科学》【年(卷),期】2019(046)008【摘要】对大量网络流量数据进行高质量特征提取与异常识别是做好网络取证的重要基础.文中重点研究并实现了网络取证中的数据处理并建立了模型库.对一种基于小波分…

初学Linux第三周

简单shell脚本&#xff1a;#!/bin/bash 第一行必须包括shell声明序列&#xff1a;#!##********************************************************************#Author: *****#QQ: *****#Date: 2018-12-31#FileName&#xff1a; hello.sh#URL: http#Descriptio…

python使用ddt找不到方法_python使用ddt过程中遇到的问题及解决方案【推荐】

前言&#xff1a;在使用DDT数据驱动HTMLTestRunner输出测试报告时遇到过2个问题&#xff1a;1、生成的测试报告中&#xff0c;用例名称后有dict() -> new empty dictionary2、使用ddt生成的用例名称无法更改1、用例名称后有dict() -> new empty dictionary报告中用例名称…

合同的不含税与税额怎么算

假设税率是6% 不含税金额&#xff1d;总金额/1.06 税额&#xff1d;不含税金额0.06 增值税在线计算器&#xff1a;http://www.ab126.com/goju/7332.html 大小写转换&#xff1a;https://link.fobshanghai.com/rmb.htm?t1525225925284 工作日计算&#xff1a;http://www.fy…

Promise进阶——如何实现一个Promise库

概述 从上次更新Promise/A规范后&#xff0c;已经很久没有更新博客了。之前由于业务需要&#xff0c;完成了一个TypeScript语言的Promise库。这次我们来和大家一步一步介绍下&#xff0c;我们如何实现一个符合Promise/A规范的Promise库。 如果对Promise/A规范还不太了解的同学&…

python中isinstance(3、object)_python中isinstance函数判断各种类型的小细节

1. 基本语法isinstance(object, classinfo)Return true if the object argument is an instance of the classinfo argument, or of a (direct, indirect or virtual)subclass thereof. Also return true if classinfo is a type object (new-style class) and object is an ob…

[前端漫谈] 做一个四则计算器

0x000 概述 近期重新开始学习计算机基础方面的东西&#xff0c;比如计算机组成原理、网络原理、编译原理之类的东西&#xff0c;目前正好在学习编译原理&#xff0c;开始对这一块的东西感兴趣&#xff0c;但是理论的学习有点枯燥无味&#xff0c;决定换种方式&#xff0c;那就是…

程序员笔试面试后上机_hcie面试有哪些要注意的事项?

大家都知道&#xff0c;华为认证hcie考试分为三个部分&#xff0c;分别是笔试、lab实验和面试。其中&#xff0c;考生讨论得最多的就是面试部分&#xff0c;因为面试不同于笔试和lab实验&#xff0c;自己埋头答题和操作就行&#xff0c;面试要面对考官&#xff0c;考核的东西非…

【Infragistics教程】在javascript构造函数中创建基本继承

2019独角兽企业重金招聘Python工程师标准>>> 【下载Infragistics Ultimate最新版本】 用javascript创建对象有四种方法。具体如下&#xff1a; 对象作为文本构造函数调用模式创建&#xff08;&#xff09;方法在ES6之后使用类继承的实现因对象创建方法而异。本文将解…