浅谈矩阵分解以及应用

浅谈矩阵分解以及应用(1)

分类: 机器学习 230人阅读 评论(2) 收藏 举报
矩阵 分解 应用

矩阵分解 (matrix decomposition, factorization)是将矩阵拆解为数个矩阵的乘积,可分为三角分解、满秩分解、Jordan分解和SVD(奇异值)分解等,常见的有三种:1)三角分解法 (Triangular Factorization),2)QR 分解法 (QR Factorization),3)奇异值分解法 (Singular Value Decompostion)-------摘自‘百度百科’;

至于为什么矩阵分解,理论上说是为了简化计算,或者是为了深化理论。举几个例子:计算一个矩阵的高次幂,利用矩阵分解就可以实现快速甚至手算出结果。此外,求解线性方程组,数据拟合,矩阵求逆等等,很多数学问题需要矩阵分解。当然,应用到实际学术生活中,最常见的数据压缩与解耦合,特别是PCA降维,KL变换,一系列学术的东东都来源于此。此外,卫星获得高分辨率遥感图像在回传到地面的时候,需要用到图像压缩与解压缩技术,这个就需要矩阵分解。

说了不少闲话,开始正题。记得一位数学老师说过,谈数学问题先说明是在什么数域。这里,咱们只谈实数域,不扩展到复数域了。

先说说三角分解吧,学习《数值分析》课的同学都对LU三角分解记忆深刻,其实LU分解是三角分解的一种,这里从LU分解开始。LU分解,L代表单位下三角矩阵(对角线元素为1),U代表上三角矩阵。数值分析课由高斯消元法求解线性方程组引出了LU分解,这个当然是LU分解的一种应用。LU分解的具体计算步骤可以参考任何一本数值分析的课本,上面一定有详细的计算过程。LU分解适用于顺序主子式不为0的矩阵,当然必须是方阵。

LU分解的用途很多,上面已经提过求解线性方程组,当然还可以引申出高斯约当消去法来求解矩阵的逆,实际上matlab就是利用这个原理来求解大部分矩阵的逆的。

第二种三角分解是QR分解,也叫正交三角分解(这个是我自己个人认为的)。因为Q是正交阵,R为上三角矩阵。QR分解的具体实现过程是这样的,取待分解矩阵A的线性无关的列向量,利用Gram-Schmidt正交化方法加标准化获得新的正交阵Q。然后再计算R阵,R阵的计算稍微复杂,主对角元素是前面Gram-Schmidt正交化方法获得列向量的模值,其他上三角元素是行位置的Q的对应列向量与列位置的A的对应线性无关列的内积。表述比较麻烦,感兴趣的可以自己参考《矩阵理论》课本。

QR分解要求矩阵只要是列满秩的就行。

QR分解用途很多,大家对于“最小二乘法”应该很熟悉了,其实“最小二乘法”的解就是QR分解得到的解。最小二乘法广泛应用于数据拟合当中,特别是搞实验物理,化学,生物的,获得一大组数据,如果想要得到近似线性的关系时候就需要对这些数据进行线性拟合。我们刚开始学习数理统计时,我们说为了求解一条方差最小的直线。实际上,从矩阵理论上讲,是为了获得在矩阵A的列空间(range domain)上最佳近似。其次,在数值分析中,我们都学过计算矩阵特征值的方法----QR算法,它是QR三角分解的变形,采用迭代的方式求解出矩阵的所有特征值。目前计算机计算中小型矩阵的特征值一般都是采用这个原理来的。毕竟,我们人工手算的话计算4阶矩阵的特征值就不错了,实际上1825年阿贝尔等人就证明了5次及以上代数方程无公式解。

此外,QR方法还可以求解矩阵的广义逆,用途还是蛮广的。

上一篇谈了矩阵分解中比较简单的三角分解,这里介绍另外两种分解:矩阵的谱分解和LR分解。

矩阵的谱是指矩阵所有特征值的集合。因此,矩阵的谱分解就是利用矩阵的特征值来对矩阵分解。利用矩阵对角化可以得到:任何一个正规矩阵A(一个矩阵满足本身与转置的乘积等于转置与本身乘积的矩阵就叫正规矩阵,比如常见的对称阵,正交阵), UT*A*U=diag(x1,x2,....)。这里U=[u1,u2.....]为正交阵,xi为特征值。从而A=U*diag(x1,x2,....)*UT。写开的话就是A=x1*u1*u1T+x2*u2*u2T+.....。这样,我们就得到正规矩阵的谱分解。

矩阵的谱分解,我感觉是对矩阵分解的最彻底的一种,显然这种分解的计算是很复杂的。因为,我们能得到矩阵的特征值与特征向量,这两个元素是一个矩阵最“好”的东东,能得到矩阵的秩,行列式的值,谱半径等等。矩阵谱分解的计算很明显需要计算出矩阵的特征值以及对应的经过Gram—Schmidt正交化之后的特征向量(保证U阵是正交阵)。

矩阵谱分解适用的矩阵是正规矩阵,当然必须是方阵了。

谱分解的用途在此不予说明(主要是我也不知道出了计算之外别的用途)。


在介绍一种矩阵分解LR分解,也叫做满秩分解。这是一种很有意思的分解,因为它是针对任何矩阵都可以进行的,特别是针对小秩矩阵分解,比如秩为1的矩阵。

LR分解中,L代表Left,R代表Right,这个分解将矩阵分成左边是列满秩阵,右边是行满秩阵。我们知道,如果左边是一个行满秩,右边是一个列满秩的话,那么乘积一定可逆。而在这里,我们是针对任意的矩阵,得到这样一个与之相反的结果。LR分解的计算很简单。对一个待分解矩阵A,对它进行行初等变换,得到一个标准的Hermit阵,取Hermit阵的每行的首个非零元素(1)所在列对应的A阵的各列,这些列构成了一组线性无关组构成L矩阵,当然Hermit阵里面的那些非全零行就构成了R矩阵。

LR分解适用于任何矩阵。

LR分解对于计算矩阵的高次幂特别有用,特别是针对小秩的矩阵,例如秩为1的矩阵,我们会经过LR分解得到列向量L1与行向量R1的乘积。于是对于一个矩阵A=L1*R1,那么A的n次幂就可以写成n个A相乘。An =A*A*A.......=L1*R1*L1*R1*L1*R1......。我们知道R1*L1是实数q。从而An =L1*q*q*....*R1=qn-1 *L1*R1= qn-1 *A。这样计算矩阵的高次幂就很简单了。

这次讲一下奇异值分解(SVD),首先说明纯粹是抛砖引玉之举,毕竟我刚学习了矩阵理论,对于大名鼎鼎的SVD可谓知之甚少。

首先推荐几篇paper讲SVD的:《A Singularly Valuable Decomposition The SVD of a Matrix》,《Sketched SVD Recovering spectral features from》,《The extraodinary SVD
》。

发几个SVD的链接,对于学习SVD很有用的:http://www.cnblogs.com/LeftNotEasy/archive/2011/01/19/svd-and-applications.html

还有一个当然是维基百科:http://en.wikipedia.org/wiki/Singular_value_decomposition。英文的wiki是个好东东,真的。

再就是本论坛的一篇博客:http://blog.csdn.net/ningyaliuhebei/article/details/7104951

所以我在这儿就不板门弄斧了。

那我写什么呢?一是学习SVD的感受:svd很强大啊,任何矩阵用它都可以被分解成为正交阵乘以对角阵(对应于矩阵本身的)再乘以一个正交阵的转置。其中,对角阵的对角线元素叫做奇异值(这也是奇异值分解的来历),是待分解矩阵A与A 转置乘积的特征值的平方根。

    这样,我们就可以实现对于矩阵的很多操作了,我们可以对二维或者三维的物体(刚体)做旋转以及伸缩,我们只需要计算出对应的正交阵以及奇异值就行。当然还有PCA和LSI,相信搞ML和AI以及PR的对于这些属于都耳闻。

我只是简要提一下这些术语,因为我自己也不是很明白……

SVD的一个用途就是求解矩阵的广义逆。

再谈谈自己对于SVD的感受,首先是很强大,其次是很有用,然后就是我至今没有搞懂左右两个正交阵的物理意义。

在稍微介绍一下非负分解(NMF)。NMF是在矩阵中所有元素均为非负数约束条件之下的矩阵分解方法,最初是由美国两位科学家D.D.Lee和H.S.
Seung在《nature》上发表的,然后引起广泛关注和研究以及应用。特别是在我上面所说的那几个方面。中文具体可参考:《非负矩阵分解:数学的奇妙力量》这篇文章。

希望与大家共同学习!!

你可能感兴趣的:(矩阵求解算法)