数值分析之奇异值分解(SVD)篇
在很多线性代数问题中,如果我们首先思考若做SVD,情况将会怎样,那么问题可能会得到更好的理解[1]。
--Lloyd N. Trefethen & David Bau, lll
为了讨论问题的方便以及实际中遇到的大多数问题,在这里我们仅限于讨论实数矩阵,注意,其中涉及到的结论也很容易将其扩展到复矩阵中(实际上,很多教材采用的是复矩阵的描述方式),另外,使用符号 x,y 等表示向量,A,B,Q等表示矩阵。
首先给出正交矩阵的概念。所谓正交矩阵,即该矩阵不同的两个列向量之间作内积等于0(平面几何中垂直的定义在多维情形下推广),相同的列向量和自身做内积等于1(单位向量)。特别地,如果Q是一个n阶正交方阵,则Q'Q=QQ'=I, 即正交矩阵的转置即是该矩阵的逆矩阵。正交矩阵在数值分析中起着很重要的作用,一个主要的原因是它能够保持向量的2范数不变(因此SVD也常用于最小二乘问题的求解中),以及矩阵的2范数以及F范数不变,即||Qx||_2=||x||_2, ||AQ||_2=||A||_2,||QA||_F=||A||_F。
奇异值分解定理:对于任意一个 m*n 的实数矩阵 A,都存在 m*m 的正交矩阵 U 和 n*n 的正交矩阵V,以及 m*n 的对角矩阵 D=diag(d_1,d_2,...,d_r),使得
A = UDV'
其中,d_1>=d_2>=...>=d_r>=0 称为奇异值,U和V的各列分别称为左奇异向量和右奇异向量。
奇异值分解定理是一个漂亮优美的结果。它不仅能够很好地描述矩阵的结构,一个秩为r的矩阵可以表示成r个秩为1的矩阵之和,而且也给出了相应的几何意义,n 维单位向量 x 在任意的 m*n 矩阵 A=UDV' 下的像下是 m 维空间中的一个超椭球。具体地,正交变换V'保持了x的向量长度不变,对角矩阵D将球面拉伸到一个超椭球上,最后正交变换U将旋转这个超椭球,但不改变它的形状,参见下图。

图1 SVD几何解释示意图[2]
奇异值分解的矩阵性质:
1. 矩阵 A 的秩等于非零奇异值的个数。
2. 矩阵 A 的值域空间等于由 U 的前 r 个列向量张成的空间,而 A 的零空间是由 V 的后面 n-r 个列向量张成的空间。
3. ||A||_2=d_1, ||A||_F=sqrt(d_1+...+d_r)。
4. A 的非零奇异值的平方等于 AA' 和 A’A 的非零特征值。
注意,一旦能够得到A的奇异值分解,按照上述给出的性质,那么关于A的秩,A的值域或者零空间的基,以及A的2-范数,F-范数等就自然地能够得到。从这方面来看,SVD可以看作是求解这些问题的一个工具。除此之外,它还被广泛地用来求解最小二乘问题,正则化问题,低秩逼近问题,数据压缩问题,文本处理中的分类问题[4]等。
细心的童鞋发现,上面的所有结论都是建立在SVD定理正确以及能够有效计算出给定矩阵A的SVD分解的基础上。关于第一个问题,可以使用数学归纳法进行证明[3];第二个问题,由于证明中采用了数学归纳法,显然它不能有效地求解出具体矩阵的SVD分解,而数值求解SVD需要借助于对称矩阵的特征值分解(一个简单的想法是对 AA' 进行特征值分解,然后得到 A 的奇异值分解,可惜该类方法数值稳定性较差,细节内容不展开叙述)。
最后,对矩阵的奇异值和矩阵的特征值之间的联系进行几点说明。第一,对于任意矩阵,都存在奇异值分解,而并非所有矩阵都存在特征值分解的;第二,奇异值分解中使用的是正交的矩阵,而特征值分解中使用的基一般不是正交的;第三,矩阵最小奇异值小于矩阵最小特征值的模长,矩阵最大奇异值大于矩阵最大奇异值的模长[5]。
参考文献:
[1] 数值线性代数 Chap4-5,L N. Trefethen,David Bau, lll 著,陆金甫,关治译,人民邮电出版社,2006年
[2] 应用数值线性代数,J W. Demmel 著,王国荣译,人民邮电出版社,2007年
[3] 矩阵计算(第三版),Gene H.Golub,Charles F.Van Loan 著,袁亚湘等译,人民邮电出版社,2011年
[4] 数学之美 Chap15,吴军著,人民邮电出版社,2013年
[5] 矩阵A的特征值与奇异值大小关系? https://www.zhihu.com/question/40181430/answer/85446211
数值分析之奇异值分解(SVD)篇的更多相关文章
- 转载:奇异值分解(SVD) --- 线性变换几何意义(下)
本文转载自他人: PS:一直以来对SVD分解似懂非懂,此文为译文,原文以细致的分析+大量的可视化图形演示了SVD的几何意义.能在有限的篇幅把这个问题讲解的如此清晰,实属不易.原文举了一个简单的图像处理 ...
- 奇异值分解(SVD) --- 几何意义
原文:http://blog.sciencenet.cn/blog-696950-699432.html PS:一直以来对SVD分解似懂非懂,此文为译文,原文以细致的分析+大量的可视化图形演示了SVD ...
- [机器学习笔记]奇异值分解SVD简介及其在推荐系统中的简单应用
本文先从几何意义上对奇异值分解SVD进行简单介绍,然后分析了特征值分解与奇异值分解的区别与联系,最后用python实现将SVD应用于推荐系统. 1.SVD详解 SVD(singular value d ...
- 【转载】奇异值分解(SVD)计算过程示例
原文链接:奇异值分解(SVD)的计算方法 奇异值分解是线性代数中一种重要的矩阵分解方法,这篇文章通过一个具体的例子来说明如何对一个矩阵A进行奇异值分解. 首先,对于一个m*n的矩阵,如果存在正交矩阵U ...
- 一步步教你轻松学奇异值分解SVD降维算法
一步步教你轻松学奇异值分解SVD降维算法 (白宁超 2018年10月24日09:04:56 ) 摘要:奇异值分解(singular value decomposition)是线性代数中一种重要的矩阵分 ...
- 用 GSL 求解超定方程组及矩阵的奇异值分解(SVD)
用 GSL 求解超定方程组及矩阵的奇异值分解(SVD) 最近在学习高动态图像(HDR)合成的算法,其中需要求解一个超定方程组,因此花了点时间研究了一下如何用 GSL 来解决这个问题. GSL 里是有最 ...
- 奇异值分解(SVD)原理详解及推导(转载)
转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/43053513 在网上看到有很多文章介绍SVD的,讲的也都不错,但是感觉还是有 ...
- 奇异值分解(SVD) --- 几何意义 (转载)
PS:一直以来对SVD分解似懂非懂,此文为译文,原文以细致的分析+大量的可视化图形演示了SVD的几何意义.能在有限的篇幅把 这个问题讲解的如此清晰,实属不易.原文举了一个简单的图像处理问题,简单形象, ...
- 奇异值分解(SVD)原理详解及推导 (转载)
转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/43053513 在网上看到有很多文章介绍SVD的,讲的也都不错,但是感觉还是有 ...
随机推荐
- senlin __init__() got an unexpected keyword argument 'additional_headers'
从senlin源码重新编译更新了服务,然后执行 senlin的 cli就遇到了错误: __init__() got an unexpected keyword argument 'additional ...
- 【sublime xftp插件】 Host key verification failed ,错误处理
错误背景: 1.CentOS7上面作为运行环境,Coding在本机的windows环境 2.在windows上安装sublime 3,然后保存代码通过xftp保存到centos7虚机上面. 3.Cen ...
- 解决SprngMVC中ResponseBody注解中文乱码
配置文件前面加入如下结构,版本号3.2.5 <bean class="org.springframework.web.servlet.mvc.method.annotation.Req ...
- 在yii框架中如何连接数据库mongodb
在文件夹common/config/main_local.php中加入如下代码: <?php return [ 'components' => [ 'mongodb' => [ 'c ...
- linux6的yum源
[base]name=CentOS-$releasever-Basebaseurl=http://centos.ustc.edu.cn/centos/6/os/x86_64/gpgcheck=1gpg ...
- Android笔记:android的适配
public int Dp2Px(Context context, float dp) { final float scale = context.getResources().getDisplayM ...
- C++ 基础知识复习(三)
43. 继承的几种方式: 答:共有继承public,保护继承protected,私有继承private.其中后两种继承会改变原有的访问级别. 44. 深复制与浅复制: 答:简单理解,深复制自己申请了内 ...
- 学习android推荐网站
1. Android Developers 作为一个Android开发者,官网的资料当然不可错过,从设计,培训,指南,文档,都不应该错过,在以后的学习过程中慢慢理解体会. 2. Android Gui ...
- php接口
如果要继承多个类的方法规范,用接口,因为抽象类只能继承一个: 如果要共享一个方法体内容,用抽象类: <?php //接口是为了规范实现它的子类,以达到统一的目的 //接口不能被实例化 inter ...
- Linux TOP 交互命令
今天总结一点top命令的一些交互命令,比较实用! h或者? 显示帮助画面,给出一些简短的命令总结说明 k 终止一个进程. 系统将提示用户输 ...