特徵值分解與奇異值分解原理與計算

(一)特徵值

如果一個非零向量v是方陣A的特徵向量,將一定可以表示成下面形式,而λ是特徵向量v對應的特徵值:

特徵值分解是將一個矩陣分解成下面的形式:

其中Q是這個矩陣A的特徵向量組成的矩陣,Σ是一個對角陣,每一個對角線上的元素就是一個特徵值。一個矩陣的一組特徵向量是一組正交向量。

【練習題】求解矩陣A的特徵值與特徵向量。




方陣的特徵值表示什麼含義呢,我們通過一組向量圖表示。初始狀態下,i(紅色)和j(藍色)表示二維座標平面下的兩個單位向量,v是空間上任意一條向量(綠色)


用方陣A左乘向量v之後,得到一個新的向量Av(紫色)


接下來,在二維空間上,手動移動向量v,移動到某一時刻,向量v(綠色)與向量Av(紫色)發生了重合,且Av的向量摸大於v的模(下圖左),再繼續移動v,又會發現在v與Av的另一個重合時刻,但此時|Av|<|v|(下圖右)


這兩個時刻,v與Av發生了重合,即兩個向量方向一致,大小差了一個lambda倍,也就是上面所提到的

這裏的lambda就是特徵值(兩個特徵值,一個大於1,一個小於1),這兩個時刻對應的v向量,就是矩陣A的特徵向量


特徵值存在以下幾個性質:

設n階矩陣A=(aij) 的特徵值爲λ1,λ2,...λn
(1)λ1+λ2+...+λn = a11+ a22+…+ann,trail(A)=特徵值的和。
(2)λ1λ2… λn =|A|,特徵值的乘積=A的行列式

若λ是方陣A的特徵值
(1)λ^2是A^2的特徵值
(2)A可逆時,λ^(-1)是A^(-1)的特徵值
(3)kλ是kA的特徵值,k∈R。

設方陣A的m個特徵值λ1,λ2 ,...,λm,與之對應的特徵向量是p1,p2,...,pm,若λ1,λ2 ,...,λm各不相等,則p1,p2 ,...,pm線性無關。(不同特徵值對應的特徵向量線性無關),實對稱矩陣不同特徵值的特徵向量相互正交。

(二)特徵值分解



【注】因爲矩陣M是對稱的,所以這個變換是一個對x,y軸的方向一個拉伸變換

當M非對稱時,在平面上對一個軸進行的拉伸變換(藍色箭頭所示)。如果要描述好一個變換M,那就描述好這個變換主要的變化方向。


分解得到的Σ矩陣是一個對角陣,若Σ裏面的特徵值是由大到小排列的,這些特徵值所對應的特徵向量就是描述這個矩陣變化方向(從主要變化到次要變化排列)

當矩陣是高維的情況下,那麼這個矩陣A就是高維空間下的一個線性變換,這個變換也同樣有很多的變換方向,通過特徵值分解得到的前N個特徵向量,對應了矩陣最主要的N個變化方向。我們利用這前N個變化方向,就可以近似這個矩陣(變換)。

也就是說:提取這個矩陣最重要的特徵。

特徵值分解的侷限:變換的矩陣必須是方陣!!

(三)奇異值與奇異值分解

在現實的世界中,遇到的大部分矩陣都不是方陣,比如說有N個學生,每個學生有M科成績;有N個用戶,每個用戶購買了M件商品,這樣形成的一個N * M的長方形矩陣。

怎樣描述這樣普通的矩陣的重要特徵?

可以使用奇異值分解來解決


A是一個N * M的矩陣,那麼得到的U是一個N * N的方陣(裏面的向量是正交的,稱爲左奇異向量),Σ是一個N * M的矩陣(除了對角線的元素都是0,對角線上的元素稱爲奇異值),VT是一個N * N的矩陣(裏面的向量也是正交的,稱爲右奇異向量)

               


右奇異向量求解:矩陣A左乘轉置AT,將會得到一個方陣(m*m),我們用這個方陣求特徵值和特徵向量,得到的vi就是右奇異向量


根據上面得到的特徵值λ,計算奇異值σ,以及左奇異向量u。


【練習題】 求解A的奇異值






可以使用Python編程實現,numpy包中存有直接計算奇異值的方法np.linalg.svd(matrix),實例如下:


奇異值σ與特徵值類似,矩陣Σ中也是從大到小排列,而且σ的減少特別的快,在很多情況下,前10%甚至1%的奇異值的和就佔了全部的奇異值之和的99%以上了。也就是說,我們也可以用前r大的奇異值來近似描述矩陣,這裏定義一下部分奇異值分解,這裏r是一個遠小於m、n的數。

右邊的三個矩陣相乘的結果將會是一個接近於A的矩陣。而這三個矩陣的「面積」之和要遠小於原始的矩陣A,可以壓縮空間來表示原矩陣A,只存儲三個矩陣U、Σ、V即可。