矩阵奇异值分解(详解)「建议收藏」

矩阵奇异值分解(详解)「建议收藏」 转载于http://blog.csdn.net/zhongkejingwang/article/details/43053513  在网上看到有很多文章介绍SVD的,讲的也都不错,但是感觉还是有需要补充的,特别是关于矩阵和映射之间的对应关系。前段时间看了国外的一篇文章,叫ASingularlyValuableDecompositionTheSVDofaMatrix,觉得…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

  转载于http://blog.csdn.net/zhongkejingwang/article/details/43053513

    在网上看到有很多文章介绍SVD的,讲的也都不错,但是感觉还是有需要补充的,特别是关于矩阵和映射之间的对应关系。前段时间看了国外的一篇文章,叫A Singularly Valuable Decomposition The SVD of a Matrix,觉得分析的特别好,把矩阵和空间关系对应了起来。本文就参考了该文并结合矩阵的相关知识把SVD原理梳理一下。

   SVD不仅是一个数学问题,在工程应用中的很多地方都有它的身影,比如前面讲的PCA,掌握了SVD原理后再去看PCA那是相当简单的,在推荐系统方面,SVD更是名声大噪,将它应用于推荐系统的是Netflix大奖的获得者Koren,可以在Google上找到他写的文章;用SVD可以很容易得到任意矩阵的满秩分解,用满秩分解可以对数据做压缩。可以用SVD来证明对任意M*N的矩阵均存在如下分解:

矩阵奇异值分解(详解)「建议收藏」

这个可以应用在数据降维压缩上!在数据相关性特别大的情况下存储X和Y矩阵比存储A矩阵占用空间更小!

   在开始讲解SVD之前,先补充一点矩阵代数的相关知识。

正交矩阵

   正交矩阵是在欧几里得空间里的叫法,在酉空间里叫酉矩阵,一个正交矩阵对应的变换叫正交变换,这个变换的特点是不改变向量的尺寸和向量间的夹角,那么它到底是个什么样的变换呢?看下面这张图

矩阵奇异值分解(详解)「建议收藏」

假设二维空间中的一个向量OA,它在标准坐标系也即e1、e2表示的坐标是中表示为(a,b)’(用’表示转置),现在把它用另一组坐标e1’、e2’表示为(a’,b’)’,存在矩阵U使得(a’,b’)’=U(a,b)’,则U即为正交矩阵。从图中可以看到,正交变换只是将变换向量用另一组正交基表示,在这个过程中并没有对向量做拉伸,也不改变向量的空间位置,加入对两个向量同时做正交变换,那么变换前后这两个向量的夹角显然不会改变。上面的例子只是正交变换的一个方面,即旋转变换,可以把e1’、e2’坐标系看做是e1、e2坐标系经过旋转某个斯塔角度得到,怎么样得到该旋转矩阵U呢?如下

                                                                                       矩阵奇异值分解(详解)「建议收藏」

                                                                  矩阵奇异值分解(详解)「建议收藏」

                                                                   矩阵奇异值分解(详解)「建议收藏」

a’和b’实际上是x在e1’和e2’轴上的投影大小,所以直接做内积可得,then

                                                                   矩阵奇异值分解(详解)「建议收藏」                                        

从图中可以看到

                        矩阵奇异值分解(详解)「建议收藏」矩阵奇异值分解(详解)「建议收藏」

所以

                                     矩阵奇异值分解(详解)「建议收藏」

正交阵U行(列)向量之间都是单位正交向量。上面求得的是一个旋转矩阵,它对向量做旋转变换!也许你会有疑问:刚才不是说向量空间位置不变吗?怎么现在又说它被旋转了?对的,这两个并没有冲突,说空间位置不变是绝对的,但是坐标是相对的,加入你站在e1上看OA,随着e1旋转到e1’,看OA的位置就会改变。如下图:

矩阵奇异值分解(详解)「建议收藏」

如图,如果我选择了e1’、e2’作为新的标准坐标系,那么在新坐标系中OA(原标准坐标系的表示)就变成了OA’,这样看来就好像坐标系不动,把OA往顺时针方向旋转了“斯塔”角度,这个操作实现起来很简单:将变换后的向量坐标仍然表示在当前坐标系中。

旋转变换是正交变换的一个方面,这个挺有用的,比如在开发中需要实现某种旋转效果,直接可以用旋转变换实现。正交变换的另一个方面是反射变换,也即e1’的方向与图中方向相反,这个不再讨论。

总结:正交矩阵的行(列)向量都是两两正交的单位向量,正交矩阵对应的变换为正交变换,它有两种表现:旋转和反射。正交矩阵将标准正交基映射为标准正交基(即图中从e1、e2到e1’、e2’)

特征值分解——EVD

    在讨论SVD之前先讨论矩阵的特征值分解(EVD),在这里,选择一种特殊的矩阵——对称阵(酉空间中叫hermite矩阵即厄米阵)。对称阵有一个很优美的性质:它总能相似对角化,对称阵不同特征值对应的特征向量两两正交。一个矩阵能相似对角化即说明其特征子空间即为其列空间,若不能对角化则其特征子空间为列空间的子空间。现在假设存在mxm的满秩对称矩阵A,它有m个不同的特征值,设特征值为

                                                                                                   矩阵奇异值分解(详解)「建议收藏」

对应的单位特征向量为

                                                                矩阵奇异值分解(详解)「建议收藏」

则有

                                                                 矩阵奇异值分解(详解)「建议收藏」

进而

                                                               矩阵奇异值分解(详解)「建议收藏」

                                                  矩阵奇异值分解(详解)「建议收藏」

                                                    矩阵奇异值分解(详解)「建议收藏」

所以可得到A的特征值分解(由于对称阵特征向量两两正交,所以U为正交阵,正交阵的逆矩阵等于其转置)

                                                        矩阵奇异值分解(详解)「建议收藏」

这里假设A有m个不同的特征值,实际上,只要A是对称阵其均有如上分解。

矩阵A分解了,相应的,其对应的映射也分解为三个映射。现在假设有x向量,用A将其变换到A的列空间中,那么首先由U’先对x做变换:

                                                                              矩阵奇异值分解(详解)「建议收藏」

U是正交阵U’也是正交阵,所以U’对x的变换是正交变换,它将x用新的坐标系来表示,这个坐标系就是A的所有正交的特征向量构成的坐标系。比如将x用A的所有特征向量表示为:

                                         矩阵奇异值分解(详解)「建议收藏」

则通过第一个变换就可以把x表示为[a1 a2 … am]’:

                           矩阵奇异值分解(详解)「建议收藏」

紧接着,在新的坐标系表示下,由中间那个对角矩阵对新的向量坐标换,其结果就是将向量往各个轴方向拉伸或压缩:

                              矩阵奇异值分解(详解)「建议收藏」

从上图可以看到,如果A不是满秩的话,那么就是说对角阵的对角线上元素存在0,这时候就会导致维度退化,这样就会使映射后的向量落入m维空间的子空间中。

最后一个变换就是U对拉伸或压缩后的向量做变换,由于U和U’是互为逆矩阵,所以U变换是U’变换的逆变换。

因此,从对称阵的分解对应的映射分解来分析一个矩阵的变换特点是非常直观的。假设对称阵特征值全为1那么显然它就是单位阵,如果对称阵的特征值有个别是0其他全是1,那么它就是一个正交投影矩阵,它将m维向量投影到它的列空间中。

根据对称阵A的特征向量,如果A是2*2的,那么就可以在二维平面中找到这样一个矩形,是的这个矩形经过A变换后还是矩形:

                                      矩阵奇异值分解(详解)「建议收藏」

这个矩形的选择就是让其边都落在A的特征向量方向上,如果选择其他矩形的话变换后的图形就不是矩形了!

奇异值分解——SVD

   上面的特征值分解的A矩阵是对称阵,根据EVD可以找到一个(超)矩形使得变换后还是(超)矩形,也即A可以将一组正交基映射到另一组正交基!那么现在来分析:对任意M*N的矩阵,能否找到一组正交基使得经过它变换后还是正交基?答案是肯定的,它就是SVD分解的精髓所在。

   现在假设存在M*N矩阵A,事实上,A矩阵将n维空间中的向量映射到k(k<=m)维空间中,k=Rank(A)。现在的目标就是:在n维空间中找一组正交基,使得经过A变换后还是正交的。假设已经找到这样一组正交基:

                                                               矩阵奇异值分解(详解)「建议收藏」

则A矩阵将这组基映射为:

                                                            矩阵奇异值分解(详解)「建议收藏」

如果要使他们两两正交,即

                                      矩阵奇异值分解(详解)「建议收藏」

根据假设,存在

                                      矩阵奇异值分解(详解)「建议收藏」

所以如果正交基v选择为A’A的特征向量的话,由于A’A是对称阵,v之间两两正交,那么

                                                  矩阵奇异值分解(详解)「建议收藏」

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

因为

                  矩阵奇异值分解(详解)「建议收藏」

所以有

                                矩阵奇异值分解(详解)「建议收藏」

所以取单位向量

                                        矩阵奇异值分解(详解)「建议收藏」

由此可得

                矩阵奇异值分解(详解)「建议收藏」

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

矩阵奇异值分解(详解)「建议收藏」

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

矩阵奇异值分解(详解)「建议收藏」

则可得到

矩阵奇异值分解(详解)「建议收藏」

继而可以得到A矩阵的奇异值分解:

                                                 矩阵奇异值分解(详解)「建议收藏」

                矩阵奇异值分解(详解)「建议收藏」

现在可以来对A矩阵的映射过程进行分析了:如果在n维空间中找到一个(超)矩形,其边都落在A’A的特征向量的方向上,那么经过A变换后的形状仍然为(超)矩形!

vi为A’A的特征向量,称为A的右奇异向量,ui=Avi实际上为AA’的特征向量,称为A的左奇异向量。下面利用SVD证明文章一开始的满秩分解:

矩阵奇异值分解(详解)「建议收藏」

利用矩阵分块乘法展开得:

矩阵奇异值分解(详解)「建议收藏」

可以看到第二项为0,有

                               矩阵奇异值分解(详解)「建议收藏」

矩阵奇异值分解(详解)「建议收藏」

            矩阵奇异值分解(详解)「建议收藏」

则A=XY即是A的满秩分解。

整个SVD的推导过程就是这样,后面会介绍SVD在推荐系统中的具体应用,也就是复现Koren论文中的算法以及其推导过程。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/207176.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pytorch学习笔记七:torchvision.datasets.ImageFolder使用详解

    pytorch学习笔记七:torchvision.datasets.ImageFolder使用详解一、数据集组织方式ImageFolder是一个通用的数据加载器,它要求我们以下面这种格式来组织数据集的训练、验证或者测试图片。root/dog/xxx.pngroot/dog/xxy.pngroot/dog/xxz.pngroot/cat/123.pngroot/cat/nsdf3.pngroot/cat/asd932_.png对于上面的root,假设data文件夹在.py文件…

    2022年6月24日
    35
  • 上海市五险一金及税后工资计算器加计扣除_上海五险一金及税后工资计算器2021

    上海市五险一金及税后工资计算器加计扣除_上海五险一金及税后工资计算器2021个税在线计算器http://salarycalculator.sinaapp.com/http://www.rong360.com/calculator/gerensuodeshui.htmlh

    2022年8月3日
    3
  • Java与C++的优劣:谁更胜一筹?

    Java与C++的优劣:谁更胜一筹?1.基础介绍Java与C++都拥有相当长的历史,且语法相当类似,并被众多业界巨头所采用。事实上,Java本来就是从C++衍生出来的。不过尽管相似,二者之间仍然存在显著区别。很多人都说会C++就能会快掌握Jave。C++是不好学,但是我告诉你java也不好学。C++难是难在语言本身,java难是难在各种框架和库。你单纯学个java语法,你什么玩意也做不了,java的东西都在java之外。

    2022年7月7日
    32
  • 【WPF】Toolkit(一个项目)的要点总结

    【WPF】Toolkit(一个项目)的要点总结架构相关1.插件式开发:MEF具体怎么使用可参考百度+Demo(密码:k8ck)2.备份机制(项目特有功能)待续3.镜像机制(项目特有功能)待续4.分模块记录日志(转)非常完善的Log4net详细说明UI相关1.多语言读取系统的显示语言(displayLanguage),显示语言的定义是:假如你的系统现在是中文的,

    2022年10月2日
    0
  • Ubuntu 优化、美化(主题、终端)[通俗易懂]

    Ubuntu 优化、美化(主题、终端)[通俗易懂]Ubuntu优化、美化(主题、终端)零效果图一优化Ubuntu\1系统更新\2安装GDebi(第三方软件安装)\3安装搜狗输入法\4软件卸载,安装4.1卸载libreOffice安装WPS4.2卸载掉亚马逊链接4.3卸载firebox浏览器安装Chrome/Chromium浏览器\5修改更新源\6vim配置\6菜单栏位置\7二美化Ubuntu\1主题1.1安装unity-tweak-tool:1.2Flatabulous主题\

    2022年7月22日
    15
  • python自行实现支付宝证书签名&验签全流程[通俗易懂]

    python自行实现支付宝证书签名&验签全流程[通俗易懂]支付宝Pythonsdk只有密钥签名,没有证书签名,下面是本人自行实现签名全流程证书签名需要新加alipay_root_cert_sn和app_cert_sn两个参数,这两个参数需要解析支付宝根证书(alipay_root_cert_sn)和应用公钥证书(appCerPublicKey_”app_id”.crt)得到:defsn_string():root_file_li=open(alipayRootCert.crt’,’r’).read().split(‘\n\n’)

    2022年5月11日
    46

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号