在看論文的過程中,經常遇到涉及到特征值、特征向量、奇異值、右奇異向量等相關知識的地方,每次都是看得似懂非懂。本文將從特征值和奇異值相關的基礎知識入手,探究奇異值和特征值的內涵,進而對特征值和奇異的知識進行梳理。
特征值分解和奇異值分解(SVD)在主成分分析(PCA)和機器學習領域都有廣泛的應用。PCA的實現由兩種方法,一種是特征值分解,另一種是奇異值分解,特征值分解和奇異值分解的目的是一樣的,都是提取出一個矩陣最重要的特性。特征值和奇異值在大部分人的印象中都只是停留在線性代數中,對他們特殊的物理意義及應用背景不勝了解。實際上特征值和奇異值都有其特定的物理意義,如奇異值分解可以將一個復雜的矩陣分解成幾個小且簡單的矩陣相乘,這些小矩陣就包含的矩陣的重要特性(奇異值、左右奇異值向量等)。有人在博文中用“描述一個人”的例子來解釋過奇異值分解:“描述一個人說這個人長得濃眉大眼,方臉,絡腮胡,而且帶個黑框的眼鏡,這樣寥寥的幾個特征,就讓別人腦海里面就有一個較為清楚的認識,實際上,人臉上的特征有着無數種的,之所以能這么描述,是因為人天生就有着非常好的抽取重要特征的能力。”其中的“人臉上的特征有着無數種”就構成了待分解的矩陣,“寥寥得幾個特征”代表了分解后的幾個小矩陣,“人天生的抽取能力”就是一個奇異值分解(SVD)的過程。說了這么多關於奇異值分解的物理意義,接下來將依次介紹特征值和奇異值的相關知識。
1、特征值
一個矩陣(方陣A)乘以一個向量(X)的結果仍然是一個同維數的向量。因此矩陣乘法(AX)對應一個表換(旋轉、平移、縮放),即將一個向量變成同維數的另一個向量。對於特征值和特征向量,我們不妨先回顧下線性代數中對特征值和特征向量的定義:設A是n階方陣,如果存在 λ 和n維非零向量X,使 ,則 λ 稱為方陣A的一個特征值,X為方陣A對應於或屬於特征值 λ 的一個特征向量。從定義可以看出,對特征向量x進行A變換的實質是將特征向量進行縮放,縮放因子為特征值λ。因此,特征向量的代數上含義是:將矩陣乘法轉換為數乘操作;特征向量的幾何含義是:特征向量通過方陣A變換只進行伸縮,而保持特征向量的方向不變。特征值表示的是這個特征到底有多重要,類似於權重,而特征向量在幾何上就是一個點,從原點到該點的方向表示向量的方向。
一個變換方陣的所有特征向量組成了這個變換矩陣的一組基。所謂基,可以理解為坐標系的軸。我們平常用到的大多是直角坐標系,在線性代數中可以把這個坐標系扭曲、拉伸、旋轉,稱為基變換。我們可以按需求去設定基,但是基的軸之間必須是線性無關的,也就是保證坐標系的不同軸不要指向同一個方向或可以被別的軸組合而成,否則的話原來的空間就“撐”不起來了。從線性空間的角度看,在一個定義了內積的線性空間里,對一個N階對稱方陣進行特征分解,就是產生了該空間的N個標准正交基,然后把矩陣投影到這N個基上。N個特征向量就是N個標准正交基,而特征值的模則代表矩陣在每個基上的投影長度。特征值越大,說明矩陣在對應的特征向量上的方差越大,功率越大,信息量越多。總結一下,特征值分解可以得到特征值與特征向量,特征值表示的是這個特征到底有多重要,而特征向量表示這個特征是什么,可以將每一個特征向量理解為一個線性的子空間,我們可以利用這些線性的子空間干很多的事情。不過,特征值分解也有很多的局限,比如說變換的矩陣必須是方陣。
在機器學習特征提取中,意思就是最大特征值對應的特征向量方向上包含最多的信息量,如果某幾個特征值很小,說明這幾個方向信息量很小,可以用來降維,也就是刪除小特征值對應方向的數據,只保留大特征值方向對應的數據,這樣做以后數據量減小,但有用信息量變化不大,PCA降維就是基於這種思路。
2、特征值分解
設A有n個特征值及特征向量,則:
將上面的寫到一起成矩陣形式:
若(x1,x2,...,xn)可逆,則左右兩邊都求逆,則方陣A可直接通過特征值和特征向量進行唯一的表示,令
Q=(x1,x2,...,xn)
Σ = diag(λ1, λ2, ..., λn)
則 ,該表達式稱為方陣的特征值分解,這樣方陣A就被特征值和特征向量唯一表示。
3、奇異值
特征值及特征值分解都是針對方陣而言,現實世界中,我們看到的大部分矩陣不是方陣,比如每道數據有M個點,一共采集了N道數據,這樣就形成了一個N*M的矩陣,那么怎樣才能像方陣一樣提取出它的特征,以及特征的重要性。奇異值分解就是來干這個事情的。奇異值相當於方陣中的特征值,奇異值分解相當於方陣中的特征值分解。
4、奇異值分解(SVD)
奇異值分解是一種適用於任意矩陣的分解方法。為了理解奇異值分解,首先從幾何層面來說明二維的奇異值分解:對於任意的2*2矩陣,通過SVD可以將一個相互垂直的網格變換到另外一個相互垂直的網格。可以通過向量的方式來描述這個事實:首先,選擇兩個相互正交的單位向量v1、v2,向量Mv1、Mv2正交(如下圖1)。u1、u2(如下圖2)分別表示Mv1、Mv2的單位向量。σ1 * u1 = Mv1 和 σ2 * u2 = Mv2。σ1 和 σ2分別表示這不同方向向量上的模,也稱作為矩陣M 的奇異值。
圖1 圖2
這樣我們就有了關系式:Mv1 = σ1u1,Mv2 = σ2u2。
向量x在變換前可以表示成:x = (v1x)v1 + (v2
x)v2
經過M變換后:Mx = (v1x)Mv1 + (v2
x)Mv2
Mx = (v1x) σ1u1 + (v2
x) σ2u2
其中:向量的內積可以用向量的轉置來表示,vx = vTx = |v||x|cosθ
因此上面的式子可以轉化為:Mx = u1σ1 v1Tx + u2σ2 v2Tx
M =u1σ1 v1T + u2σ2 v2T
上述的式子經常表示成:M =UΣVT
U 矩陣(左奇異矩陣)的列向量分別是u1,u2(MMT的特征向量);Σ是一個對角矩陣,對角元素分別是對應的σ1 和 σ2;V矩陣(右奇異矩陣)的列向量分別是v1,v2(MTM的特征向量)。上角標T 表示矩陣 V 的轉置。這就表明任意的矩陣 M 是可以分解成三個矩陣。V表示了原始域的標准正交基,U表示經過M 變換后的co-domain的標准正交基,Σ表示了V 中的向量與u中相對應向量之間的關系。從圖3反映了幾個相乘矩陣的大小關系。
圖3
5、特征值和奇異值關系
特征值和奇異值既然各自描述了矩陣中特征(特征向量和奇異值向量)的重要性,那么必然存在一定的關系。一般矩陣A,將A與其轉置相乘ATA將會得到一個方陣,便可求得方陣ATA的特征值(ATAvi=λivi)。這里的得到的特征向量vi上面的右奇異向量,所有特征向量一起組成了右奇異矩陣。此外我們還可以得到奇異值和左奇異向量(矩陣):
這里的σ就是上面說的奇異值,u就是上面說的左奇異向量。奇異值σ跟特征值類似,在矩陣Σ中也是從大到小排列,而且σ的減少特別的快,在很多情況下,前10%甚至1%的奇異值的和就占了全部的奇異值之和的99%以上了。也就是說,我們也可以用前r大的奇異值來近似描述矩陣,這里定義一下部分奇異值分解:
r是一個遠小於m、n的數,這樣矩陣的乘法看起來像是下面的樣子:
右邊的三個矩陣相乘的結果將會是一個接近於A的矩陣,在這兒,r越接近於n,則相乘的結果越接近於A。而這三個矩陣的面積之和(在存儲觀點來說,矩陣面積越小,存儲量就越小)要遠遠小於原始的矩陣A,我們如果想要壓縮空間來表示原矩陣A,我們存下這里的三個矩陣:U、Σ、V就好了。
參考:
奇異值分解及幾何意義:http://blog.csdn.net/redline2005/article/details/24100293
機器學習中的數學(5)-強大的矩陣奇異值分解(SVD)及其應用:http://www.cnblogs.com/LeftNotEasy/archive/2011/01/19/svd-and-applications.html
線性判別分析(LDA), 主成分分析(PCA): http://www.cnblogs.com/LeftNotEasy/archive/2011/01/08/lda-and-pca-machine-learning.html