學習紀錄:
摘自: 機器學習中的數學(5)-強大的矩陣奇異值分解(SVD)及其應用 - LeftNotEasy - 博客園 (cnblogs.com)
主要說明方法思路
特征值分解和奇異值分解在機器學習領域都是屬於滿地可見的方法。兩者有着很緊密的關系。特征值分解和奇異值分解的目的都是一樣,就是提取出一個矩陣最重要的特征。
1)特征值:
如果說一個向量v是方陣A的特征向量,將一定可以表示成下面的形式:
這時候λ就被稱為特征向量v對應的特征值,一個矩陣的一組特征向量是一組正交向量。特征值分解是將一個矩陣分解成下面的形式:
其中Q是這個矩陣A的特征向量組成的矩陣,Σ是一個對角陣,每一個對角線上的元素就是一個特征值。我這里引用了一些參考文獻中的內容來說明一下。首先,要明確的是,一個矩陣其實就是一個線性變換,因為一個矩陣乘以一個向量后得到的向量,其實就相當於將這個向量進行了線性變換。比如說下面的一個矩陣:
因為這個矩陣M乘以一個向量(x,y)的結果是:
上面的矩陣是對稱的,所以這個變換是一個對x,y軸的方向一個拉伸變換(每一個對角線上的元素將會對一個維度進行拉伸變換,當值>1時,是拉長,當值<1時時縮短),當矩陣不是對稱的時候,假如說矩陣是下面的樣子:
它所描述的變換是下面的樣子:
這其實是在平面上對一個軸進行的拉伸變換(如藍色的箭頭所示),在圖中,藍色的箭頭是一個最主要的變化方向(變化方向可能有不止一個),如果我們想要描述好一個變換,那我們就描述好這個變換主要的變化方向就好了。反過頭來看看之前特征值分解的式子,分解得到的Σ矩陣是一個對角陣,里面的特征值是由大到小排列的,這些特征值所對應的特征向量就是描述這個矩陣變化方向(從主要的變化到次要的變化排列)
當矩陣是高維的情況下,那么這個矩陣就是高維空間下的一個線性變換,這個線性變化可能沒法通過圖片來表示,但是可以想象,這個變換也同樣有很多的變換方向,我們通過特征值分解得到的前N個特征向量,那么就對應了這個矩陣最主要的N個變化方向。我們利用這前N個變化方向,就可以近似這個矩陣(變換)。也就是之前說的:提取這個矩陣最重要的特征。總結一下,特征值分解可以得到特征值與特征向量,特征值表示的是這個特征到底有多重要,而特征向量表示這個特征是什么,可以將每一個特征向量理解為一個線性的子空間,我們可以利用這些線性的子空間干很多的事情。不過,特征值分解也有很多的局限,比如說變換的矩陣必須是方陣。
2)奇異值:
下面談談奇異值分解。特征值分解是一個提取矩陣特征很不錯的方法,但是它只是對方陣而言的,在現實的世界中,我們看到的大部分矩陣都不是方陣,比如說有N個學生,每個學生有M科成績,這樣形成的一個N * M的矩陣就不可能是方陣,我們怎樣才能描述這樣普通的矩陣呢的重要特征呢?奇異值分解可以用來干這個事情,奇異值分解是一個能適用於任意的矩陣的一種分解的方法:
假設A是一個N * M的矩陣,那么得到的U是一個N * N的方陣(里面的向量是正交的,U里面的向量稱為左奇異向量),Σ是一個N * M的矩陣(除了對角線的元素都是0,對角線上的元素稱為奇異值),V’(V的轉置)是一個N * N的矩陣,里面的向量也是正交的,V里面的向量稱為右奇異向量),從圖片來反映幾個相乘的矩陣的大小可得下面的圖片
那么奇異值和特征值是怎么對應起來的呢?首先,我們將一個矩陣A的轉置 * A,將會得到一個方陣,我們用這個方陣求特征值可以得到: 這里得到的v,就是我們上面的右奇異向量。此外我們還可以得到:
這里的σ就是上面說的奇異值,u就是上面說的左奇異向量。奇異值σ跟特征值類似,在矩陣Σ中也是從大到小排列,而且σ的減少特別的快,在很多情況下,前10%甚至1%的奇異值的和就占了全部的奇異值之和的99%以上了。也就是說,我們也可以用前r大的奇異值來近似描述矩陣,這里定義一下部分奇異值分解:
r是一個遠小於m、n的數,這樣矩陣的乘法看起來像是下面的樣子:
右邊的三個矩陣相乘的結果將會是一個接近於A的矩陣,在這兒,r越接近於n,則相乘的結果越接近於A。而這三個矩陣的面積之和(在存儲觀點來說,矩陣面積越小,存儲量就越小)要遠遠小於原始的矩陣A,我們如果想要壓縮空間來表示原矩陣A,我們存下這里的三個矩陣:U、Σ、V就好了。