常见矩阵分解方法及其应用

1、LU分解

可以说是最简单的矩阵分解方法,将矩阵A分解成L(下三角)矩阵和U(上三角)矩阵的乘积。其实就是高斯消元法的体现,U矩阵就是利用高斯消元法得到的,而消元过程用到的初等变换矩阵乘积就是L矩阵。需要注意的是,L矩阵可以是置换过的矩阵,即一个下三角矩阵和一个置换矩阵的乘积(可以参考MATLAB中LU分解的函数lu)。

参考资料:

矩阵分解资料1

矩阵分解资料2

适用范围:A可以是一个一般矩阵。

应用:

  • 可以利用LU分解来求原矩阵的行列式和逆,设A=LU,则det(A)=det(L)det(U), inv(A)=inv(U)inv(L)。
  • 可以利用LU分解来求解线性方程组,这与接下来的Cholesky分解比较像,反正Cholesky分解也可以说是从LU分解而来的。对于线性方程组Ax=b, 对A进行LU分解,A=LU,则有(LU)x=b, 令Ux=y,则有Ly=b,这样解两个简单的方程Ly=b和Ux=y即可。

2、Cholesky分解

又叫LL^T分解。有了对LU分解的理解,Cholesky分解其实就是LU分解的进阶版。但是不同于LU分解的是,Cholesky分解只适用于正定的对称阵。在复数域,Cholesky分解要求矩阵是正定的Hermitian矩阵,即正定的共轭对称矩阵。要求这么多,就是因为Cholesky分解可以看成是给矩阵开平方根。

小插曲

其实复数域和实数域很多都是对应的,实数域的对称阵对应了复数域的共轭对称阵,实数域的正交矩阵对应了复数域的酉矩阵:一个矩阵R是正交矩阵表明它的逆和转置相等,即R^{T}R=RR^T=I,而酉矩阵Q是指逆和共轭转置相等,即Q*Q=QQ*=I。后面涉及到正交矩阵的地方,都可以推广到酉矩阵。

参考资料:

适用范围:正定的Hermitian矩阵。

应用:简化求逆过程,可用于求马氏距离,同样参考矩阵分解——三角分解(Cholesky 分解);另外,来自阿里AI Labs的李名杨博士在ppt中提到过的例子(见下图),也是简化了求逆的过程。

3、QR分解

这也是一种很重要的分解方法,可以将原矩阵分解成一个正交矩阵Q和一个上三角矩阵R的乘积。而求解QR分解本身又要涉及一些其他方法,一般来讲,求解QR分解主要有三种方法:Gram-Schmidt正交化法(QR分解中的Q本身就可以看作是正交化构造出来的),Household变换法,Givens变换法。

参考资料:

这里面有利用QR分解迭代求特征值的推导过程,写的很好;关于Household变换和Givens变换,参考https://blog.csdn.net/u011584941/article/details/44559135和https://blog.csdn.net/flyfish5/article/details/52315062以及https://www.zhihu.com/question/51432776,其实Household变换就是n维空间的镜面变换,Givens变换是n维空间在某个2维平面上的旋转变换。

适用范围:一般矩阵。

应用:可以用来求矩阵的特征值以及求解最小二乘法。

4、特征值分解及奇异值分解

特征值分解(EVD分解)及奇异值分解(SVD分解)恐怕是我觉得最重要的一类分解方法了,考虑到特征值和特征向量本身的重要性。这里推荐一下关于特征值和特征向量的理解,如果之前没有很透彻的话,看完后绝对茅塞顿开!先看http://www.cnblogs.com/LeftNotEasy/archive/2011/01/19/svd-and-applications.html的第一部分,然后看http://www.matongxue.com/madocs/228.html,这位同学辛苦做了互动的处理,可以直观地看到特征值和特征向量对矩阵的作用。

关于特征值分解,针对的是方阵,分解成A=QΣQ^{-1}  A=QΣQ-1(-1是上标),其中Q是可逆矩阵,Σ是一个对角阵,对角元就是从大到小排列的特征值,而Q的列向量就是对应的特征向量。看到这个表达应该很眼熟,因为这就是相似矩阵的定义,可以看成是A~Σ。再推荐一个讲相似矩阵的,同样让人神清气爽,茅塞顿开:https://www.zhihu.com/question/20501504(讲特征向量和特征值的貌似和这个是一个人,大神,深入浅出,形象生动)。这样来看,特征值分解其实就是一种基变换,Q是过渡矩阵,将A变到以特征向量为基的空间上来,Σ就是A矩阵表达的线性变换在以特征向量为基的空间上的表达,这个线性变换是A和Σ所共有的,这也是相似矩阵的内涵。当然以上结论是在A为对称阵,即Q的列向量是正交的情况下才成立的,只有这样Q中的列向量也就是A的特征向量才可以构成一组基。

特征值分解只能用在方阵上,那如果不是方阵该怎么办呢?这时候就轮到奇异值分解登场了!奇异值分解就是对于一个一般的矩阵A,有A=UΣVT(T是上标),U和V都是正交阵,Σ是对角阵。对这个一般的矩阵A,我们可以构造一个方阵,也就是ATA或者AAT(顺序不同得到的奇异值向量就不同,我们一会再看~~ T是上标,再磨叽一遍,接下来就不磨叽了),这样我们就可以进行特征值分解了。那么ATA=(UΣVT)TUΣVT=VΣ(UT U)ΣVT=VΣ2VT(这里用到了U是正交阵的性质)。这样一来,Σ2的对角元就是ATA的特征值,V的列向量就是ATA的特征向量,如果定义λ是ATA的特征值,那么Σ的对角元就是λ的平方根。如此,定义V为A的右奇异向量。同理,AAT= UΣVT(UΣVT)T= UΣ(VT V)ΣUT= UΣ2UT,那么U定义为A的左奇异向量。

之所以做奇异值分解或者特征分解,是因为一般来讲,矩阵的特征值或者奇异值大小相差很多,最大的几个特征值或者奇异值之和就能占据所有特征值或者奇异值之和的99%了,这样用最大的几个就可以近似原矩阵了,实现了压缩和近似。

参考资料:

讲解很全面http://www.cnblogs.com/LeftNotEasy/archive/2011/01/19/svd-and-applications.html。

适用范围:特征值分解只适用于方阵,奇异值分解则适用于任何矩阵。

应用:也可以参考上面的文章。

小插曲

这里再简单提一下PCA。PCA详解,参考https://www.cnblogs.com/hadoop2015/p/7419087.html ;PCA和LDA的区别和联系,参考http://www.cnblogs.com/LeftNotEasy/archive/2011/01/08/lda-and-pca-machine-learning.html。其实PCA就是协方差矩阵特征值分解或SVD分解的应用,而SVD分解做PCA与特征值分解做PCA差别在于,SVD可以解出左右奇异向量U和V,用U和V可以对数据的行列分别进行降维,即不止压缩特征的长度,还可以对近似的样本进行合并压缩。而PCA与KLT,可以参考https://blog.csdn.net/oldmonkeyyu_s/article/details/45766543,可以说PCA是离散化的KLT。PCA还有一个直接的应用,就是特征脸Eigenface,几乎是直接应用,差别可能在于协方差矩阵太大,不能直接使用。因为没做过人脸识别,所以不具备太多的发言权,参考http://www.360doc.com/content/17/0425/23/9200790_648664201.shtml。

5、小结   

以上是几种常用的矩阵分解方法。当然了,矩阵分解本身就是一个值得研究的方向,有很多有效的应用,今后有时间可以再继续深挖。

猜你喜欢

转载自blog.csdn.net/God_68/article/details/81637331