【线性代数】6-7:SVD分解(Singular Value Decomposition-SVD)
原文地址1:https://www.face2ai.com/Math-Linear-Algebra-Chapter-6-7转载请标明出处
Abstract: 本文介绍SVD,奇异值分解,应该可以算是本章最后的高潮部分了,也是在机器学习中我们最常用的一种变换,我们经常需要求矩阵的特征值特征向量,比如联合贝叶斯,PCA等常规操作,本文还有两个线性代数的应用,在图像压缩上,以及互联网搜索上。
Keywords: Singular Value Decomposition,JPEG2000,Eigenvalues,Eigenvectors
SVD分解
今天的废话关于学习知识,最近看到一种说法,我觉的非常的形象,有个大神(是谁我忘了),他说已知的知识像一个圆圈,而自己能感受的未知就是紧邻圆圈,圆外部的区域,当你知道的知识越来越多,圆圈不断扩大,圆周也随之扩大,所以你会越来越发现自己无知,那么就会更努力的去学习,所以越有知识的人越谦逊,尤其是对待知识上,尊重知识,探索未知领域是人类文明存在的根本动力。
奇异值分解 (Singular Value Decomposition)
SVD,熟悉的名字,如果不学习线性代数,直接机器学习,可能最先接触的就是SVD,所以我记得在写上个系列的博客的时候(CSDN,图像处理算法)就说到过SVD,当时还调侃了下百度,每次搜SVD出来的都是一把枪(报告政府,这个枪是穿越火线里面的,没超过1.7J)
这张分解图是我无意中发现的,ak47的发明人说过,如果一把枪,零件已经精简到最少了,那么这个才是精品,类似的意思上篇博客也说过,矩阵变换到最简单的形式,能够体现出其最重要的性质。
SVD,奇异值分解,与QR,LU,SΛS−1S\Lambda S^{-1}SΛS−1 等变换类似,其经过变换后会得到一个结构特异性质非凡的矩阵,SVD分解的结果和形式与对角化都非常相似,只是在形式和思路上更复杂,或者说如果说Jordan 是矩阵的对角化的扩展,因为有些矩阵特征向量不完全,那么SVD也是对角化的扩展,因为有些矩阵并不是方的。
所以SVD也是对角化,并且拥有比 A=SΛS−1A=S\Lambda S^{-1}A=SΛS−1 更完美的性质,但却是也复杂了一些,A=SΛS−1A=S\Lambda S^{-1}A=SΛS−1 有以下几个问题,需要完善:
- S中特征向量一般不是正交的,除非A是对称矩阵
- A并不是总有足够的特征值,这个是Jordan解决的问题,多个特征值相等,其对应于一个特征向量的时候,Jordan可以写成一块一块的对角矩阵
- A必须是方的方的方的
Singular Vectors作为eigenvectors 的替代品,可以完美解决上述问题,但是作为代价,我们的计算过程会变得复杂,并且Singular Vectors有两组,uuu 和 vvv
uuu 对应的是AATAA^TAAT 的特征向量,因为 AATAA^TAAT 对称,所以 uuu 们可以选择相互正交的一组。
同理 vvv 对应 ATAA^TAATA 的特征向量,因为ATAA^TAATA 对称,所以 vvv 们也可以选择相互正交的一组。
这里注意是选择,因为你也可以选择不正交的,但是不正交的可能就会很麻烦了。
铺垫的差不多 ,然后我们有下面的这条重要性质,为什么会成立后面有证明,现在就告诉你SVD究竟是个啥子鬼:
Av1=σ1u1Av2=σ2u2⋮Avn=σnunAv_1=\sigma_1u_1\\ Av_2=\sigma_2u_2\\ \vdots\\ Av_n=\sigma_nu_n\\ Av1=σ1u1Av2=σ2u2⋮Avn=σnun
v1,…,vnv_1,\dots,v_nv1,…,vn 是ATAA^TAATA 的特征向量,所以 vvv 是矩阵A的Row Space
u1,…,unu_1,\dots,u_nu1,…,un 是AATAA^TAAT 的特征向量,所以 uuu 是矩阵A的Column Space
σ1,…,σn\sigma_1,\dots,\sigma_nσ1,…,σn 全部为正数,称为矩阵A的奇异值。
然后下面我们把 uuu 和 vvv 组合成矩阵 UUU 和 VVV ,那么根据对称矩阵的性质,UTU=IU^TU=IUTU=I 同理 VTV=IV^TV=IVTV=I 那么接下来我们来组合一下:
AV=UΣA[v1…vr]=[u1…ur][σ1⋱σr]AV=U\Sigma \\ A \begin{bmatrix} &&\\ v_1&\dots&v_r\\ && \end{bmatrix}= \begin{bmatrix} &&\\ u_1&\dots&u_r\\ && \end{bmatrix} \begin{bmatrix} \sigma_1&&\\ &\ddots&\\ &&\sigma_r \end{bmatrix} AV=UΣA⎣⎡v1…vr⎦⎤=⎣⎡u1…ur⎦⎤⎣⎡σ1⋱σr⎦⎤
矩阵形式就是这样喽,没什么解释的,就是上面计算的组合形式,但是注意这里有个很重要的参数,rrr 没错,就是矩阵的rank,这里rank表示了矩阵A的Singular Values的数量,所以上面计算从规模上是:
(m×n)(n×r)=(m×r)(r×r)m×r=m×r(m\times n)(n\times r)=(m\times r)(r\times r)\\ m\times r=m\times r (m×n)(n×r)=(m×r)(r×r)m×r=m×r
从矩阵相乘的规模上也能看出等式没有问题,但是这个r有的问题,可以肯定的是,有效的Singular vector有r组,但是这样与原始矩阵形状差的有点多,那么就补一补,虽然补的都是没用的,但是也算是整齐划一了,首先 Σ\SigmaΣ 中缺少的只能补0 ,所以对应的V就只能补A的Nullspace了,因为这样 AVAVAV 的补充部分是0,同理,为了配合V,U添加的是left nullspace,并且这些添加的无用值也要选择orthonormal的,以保证UTU=IU^TU=IUTU=I 和VTV=IV^TV=IVTV=I。
其实这里隐藏了一个重要的知识点,就是四个空间的那课,矩阵的rowspace和nullspace正交column space与left nullspace正交,而V本来是A的行空间正交基,那么添加的一定是Nullspace中的正交基,以保证矩阵正交,所以完美结合,(如果忘了四个空间点击查看)
所以更一般化的表示:
AV=UΣA[v1…vn]=[u1…um][σ1⋱σr]AV=U\Sigma \\ A \begin{bmatrix} &&\\ v_1&\dots&v_n\\ && \end{bmatrix}= \begin{bmatrix} &&\\ u_1&\dots&u_m\\ && \end{bmatrix} \begin{bmatrix} \sigma_1&&&\\ &\ddots&&\\ &&\sigma_r&\\ &&& \end{bmatrix} AV=UΣA⎣⎡v1…vn⎦⎤=⎣⎡u1…um⎦⎤⎣⎢⎢⎡σ1⋱σr⎦⎥⎥⎤
规模上是,注意 Σ\SigmaΣ 不是方阵:
(m×n)(n×n)=(m×m)(m×n)m×n=m×n(m\times n)(n\times n)=(m\times m)(m\times n)\\ m\times n=m\times n (m×n)(n×n)=(m×m)(m×n)m×n=m×n
Σ\SigmaΣ 被填充成立 m×nm\times nm×n 通过在矩阵中加入0来实现,新的矩阵U和V依旧满足 VTV=IV^TV=IVTV=I以及 UTU=IU^TU=IUTU=I
那么我们的A就可以分解了
AV=UΣfor:VVT=Iso:A=UΣVTSVDis:A=u1σ1v1T+⋯+urσrvrTAV=U\Sigma\\ for:\;VV^T=I\\ so:\\ A=U\Sigma V^T\\ SVD\,\,\, is:\\ A=u_1\sigma_1 v_1^T+\dots+u_r\sigma_r v_r^T AV=UΣfor:VVT=Iso:A=UΣVTSVDis:A=u1σ1v1T+⋯+urσrvrT
其中uuu 是m×1m\times 1m×1 的 vTv^TvT 是 1×n1\times n1×n 的,所以A是 m×nm\times nm×n 的没有问题,并且所有 uiσrviTu_i\sigma_r v_i^TuiσrviT d的rank都是1,这就是Sigular Values Decomposition了,这里反复的验证规模的原因是因为A不是方阵,所以,在做乘法的时候要非常小心矩阵规模。那个小的只有r个有用值的SVD我们叫他reduced SVD(其实我觉得这个更有实际意义,毕竟这里面才有最重要的信息,新增的那些最后奇异值都是0了,也就没有啥作用了)可以表示为:
A=UrΣrVrTA=U_r\Sigma_r V_r^T A=UrΣrVrT
写了这么多,我们到现在还不知道Singular是怎么计算出来的,那么我们先给出结论,后面继续证明:
σi2=λi\sigma_i^2=\lambda_i σi2=λi
其中λi\lambda_iλi 是ATAA^TAATA 和AATAA^TAAT 的特征值。
那么要问ATAA^TAATA 和AATAA^TAAT 拥有相同的特征值,为什么?
这个我真没想明白怎么证明,所以这个地方算个坑,会了再回来填
然后我们得到Singular Values后,我们把他们按照从大到小的顺序排列,然后写成上面SVD的形式:
σ1≥σ2≥σ3⋯≥σn\sigma_1 \geq \sigma_2 \geq \sigma_3 \dots \geq \sigma_n σ1≥σ2≥σ3⋯≥σn
下面举个小
【线性代数】6-7:SVD分解(Singular Value Decomposition-SVD)相关推荐
- MIT | 数据分析、信号处理和机器学习中的矩阵方法 笔记系列 Lecture 6 Singular Value Decomposition (SVD)
本系列为MIT Gilbert Strang教授的"数据分析.信号处理和机器学习中的矩阵方法"的学习笔记. Gilbert Strang & Sarah Hansen | ...
- 奇异值(Singular value decomposition SVD)分解
本文摘自两篇博客,感谢博主分享 一.原文地址:http://blog.csdn.net/wangzhiqing3/article/details/7446444 SVD分解 SVD分解是LSA的数学基 ...
- Singular Value Decomposition(SVD)--奇异值分解【转】
奇异值分解是线性代数中一种重要的矩阵分解,在信号处理.统计学等领域有重要应用.奇异值分解在某些方面与对称矩阵或Hermite矩阵基于特征向量的对角化类似.然而这两种矩阵分解尽管有其相关性,但还是有明显 ...
- 特征分解(eigendecomposition) and 奇异值分解(singular value decomposition, SVD)
- Chapter 7 (Symmetric Matrices and Quadratic Forms): The Singular Value Decomposition (奇异值分解, SVD)
目录 奇异值 奇异值的定义 非零奇异值 The Singular Value Decomposition (SVD) 奇异值分解 一些性质 几何解释 紧奇异值分解与截断奇异值分解 奇异值分解与矩阵近似 ...
- 奇异值分解(Singular Values Decomposition,SVD)
奇异值分解 1.奇异值分解 1.1 变换(Transformations) 1.2 线性变换(Linear Transformations) 1.3 降维(Dimensionality Reducti ...
- 机器学习笔记(二)矩阵和线性代数 例:用Python实现SVD分解进行图片压缩
线性代数基本只要是理工科,都是必修的一门课.当时学习的时候总是有一个疑惑,这个东西到底是干嘛用的?为什么数学家发明出这么一套方法呢,感觉除了解方程没发现有什么大用啊!但随着学习的深入,慢慢发现矩阵的应 ...
- 【机器学习中的矩阵分解】LU分解、QR分解、SVD分解
学习总结 文章目录 学习总结 一.三角分解(LU分解) 1.1 高斯消元 1.2 LU分解原理 1.3 LU分解python代码 1.4 LU分解算法 二.QR分解 2.1 Schmid 正交化 2. ...
- 什么是奇异值?奇异值分解是什么?SVD分解详解及实战
什么是奇异值?奇异值分解是什么?SVD(Singular Value Decomposition)分解详解及实战 TSVD:Truncated Singular Value Decomposition ...
最新文章
- 软件工程--第三周学习进度
- 配置管理漫漫谈之CCB
- 大家放松下吧,咱家先在首页呆会儿!
- JqueryMobile学习之二---对话框
- python函数参数传递机制_Python 学习笔记(一) 理解Python的函数传参机制
- 吴恩达团队最新成果:用深度学习预测死亡概率,改善临终关怀
- Java集合——题目
- 关于Fragment的setUserVisibleHint() 方法和onCreateView()的执行顺序
- 港顺计算机怎么放音乐,csgo怎么放歌 CSGO内置语音播放歌曲
- 简单工具之 ---- IP地址快速修改脚本
- 杭电Oj刷题(2009)
- android 6.0截屏的实现,android截屏实现
- MongoBD命令大全
- C# serialport串口接收数据异常,出现很多3F的解决方法
- Oracle字符集讨论(转)
- 零信任架构和访问控制模型ABAC
- “实践是检验真理的唯一标准”是公理,公理是原点,原点是循环论证
- 高中理科学生成绩管理系统(C语言课程设计)
- js根据银行卡号判断属于哪个银行并返回银行卡类型
- 易语言单窗口单ip教程_手游搬砖经验单窗口单IP防封黄金法则