1. 程式人生 > >奇異值分解(SVD)和主成分分析(PCA)

奇異值分解(SVD)和主成分分析(PCA)

設X是一個n*m的資料矩陣(在此不把它理解成變換),每一列表示一個數據點,每一行表示一維特徵。

對X做主成分分析(PCA)的時候,需要求出各維特徵的協方差,這個協方差矩陣是XX^T/n
(其實需要先把資料平移使得資料的均值為0,不過在此忽略這些細節)
PCA做的事情,是對這個協方差矩陣做對角化:XX^T/n = P\Lambda P^T
可以這樣理解上式右邊各項的物理意義:用一個均值為0的多維正態分佈來擬合數據,則正交矩陣P的每一列是正態分佈的概率密度函式的等高線(橢圓)的各個軸的方向,而對角矩陣\Lambda的對角線元素是資料在這些方向上的方差,它們的平方根跟橢圓各個軸的長度成正比。

現在來看資料矩陣X的奇異值分解:X=USV^T,其中U、V各列是單位正交的,S是對角陣,對角元非零。
由此式可以得到XX^T/n = USV^TVSU^T/n = U(S^2/n)U^T


也就是說,SVD中的矩陣U相當於PCA中的矩陣P,不過僅保留了\Lambda的非零特徵值對應的那些特徵向量,而S/\sqrt{n}=\Lambda^{1/2}(也只保留了非零特徵值)。
所以,SVD中的U代表了X中資料形成的正態分佈的軸的方向(一組單位正交基),S/\sqrt{n}代表了這些軸的長度(分佈的標準差)。
那麼V呢?可以把US放在一起看成一個由伸縮和旋轉組成的座標變換(不包括平移),資料矩陣X是由資料矩陣V^T經此變換得來的,而V^T的各列(V的各行)則服從標準正態分佈。這也就是說,V^T的各維特徵(V^T的各行,V的各列)是互不相關的且各自的方差均為1,也就是說V的各列是單位正交的。

現在換一個角度,把X中的各行看作資料,那麼X=USV^T就也有了新的理解。
現在,V^T的各行(V的各列)就成了X的各行形成的正態分佈的軸向(單位正交基),S/\sqrt{m}

是這些軸的長度,而U中的各行資料服從標準正態分佈,U的各列單位正交。

可以看到,對於X=USV^T這個式子,無論是把X的各行還是各列看成資料,都能解釋U、V各列的單位正交性,但它們的單位正交性的含義不同(一個是單位正交基,一個是標準正態分佈)。其中S除以資料個數的平方根後是標準正態分佈在各個軸上的標準差,從兩個角度看得到的標準差是成比例的。