1. 程式人生 > >淺談矩陣分解以及應用

淺談矩陣分解以及應用

轉自 https://blog.csdn.net/BPSSY/article/details/17552839

https://blog.csdn.net/carrierlxksuper/article/details/8487276

矩陣分解 (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》上發表的,然後引起廣泛關注和研究以及應用。特別是在我上面所說的那幾個方面。中文具體可參考:《非負矩陣分解:數學的奇妙力量》這篇文章。

希望與大家共同學習!!