機器/統計學習:主成分分析(Principal Component Analysis, PCA)

Tommy Huang
Apr 20, 2018

--

MATLAB範例, Python範例

主成分分析,我以前在念書(統計系)的時候老師都講得很文謅謅,我其實都聽不懂。

「主成分分析在機器學習內被歸類成為降維(Dimension reduction)內特徵擷取(Feature extraction)的一種方法,降維就是希望資料的維度數減少,但整體的效能不會差異太多甚至會更好」 → 其實說法還是很文謅謅。

簡單說法是,降維(Dimension reduction)是當資料維度數(變數)很多的時候,有沒有辦法讓維度數(變數)少一點,但資料特性不會差太多。

這邊我會分兩種方式(機器學習和統計學)去解釋PCA:

機器學習

機器學習主要是希望用PCA達到dimension reduction的目的,主要是為了避免Hughes 現象(Hughes Phenomenon)/ 維度詛咒(curse of dimensionality)

這邊先簡單說維度詛咒,預測/分類能力通常是隨著維度數(變數)增加而上升,但當模型樣本數沒有繼續增加的情況下,預測/分類能力增加到一定程度之後,預測/分類能力會隨著維度的繼續增加而減小(之後在寫一篇維度詛咒的介紹)。

主成份分析的基本假設是希望資料可以在特徵空間找到一個投影軸(向量)投影後可以得到這組資料的最大變異量,好文謅謅這是什麼意思哩?

我們來看一個圖(假設我們有一組資料變數是身高和體重),我們希望找到一個向量可以投影(紅色的線)

這邊稍微回顧一下投影(projection),如果線性代數有好好學,這邊可以跳過

有一個點藍色的點對原點的向量為xi(減化寫法),有一個軸為v,他的投影(正交為虛線和藍色線為90度)向量為紅色那條線。

紅色線和黑色線的夾角為θ,xi投影長度為藍色線計算方式

所以向量v也就是紅色線計算方式為:

如果v為單位向量(unit),||v||=1

其中的數學

假設有一組資料六個點(x1, x2, x3, x4, x5, x6),有兩個投影向量v和v’(下圖),投影下來後,資料在v’上的變異量比v上的變異量小。

左圖為資料投影在v向量上,右圖為資料投影在v’向量上。
從圖可以知道v向量資料投影後有較大的變異量

變異量怎麼計算?

所以假設有n的樣本點{x1, x2,…, xn},xiRd投影軸為v

所以投影後的點為{vT x1, vT x2,…, vT xn}

PCA前提假設都會先將資料shift到0(也就是每個變數的平均數是0),主要原因有兩個,一先將資料shift到0不影響找到的投影軸的方向,第二公式推導會簡單很多。

單變量的投影後的變異數

機器學習通常用多變量表示,所以會寫成矩陣的方式

C為共變異數矩陣(covariance matrix)

主成份分析則是在找投影向量讓投影後的資料變異量最大(最佳化問題):

因為有限制式在,所以需要轉成Lagrange去做

然後偏微分找解

找出來得解為:

如果線性代數有好好學(還沒有還給老師),其實就是解C (共變異數矩陣)的特徵值(eigenvalue, λ )和特徵向量(eigenvector, v)。

note:所以解出來的eigenvalue就是變異量(variance),eigenvector就是讓資料投影下去會有最大變異量的投影軸。

剛剛例子(身高和體重),下左圖,經由PCA可以萃取出兩個特徵成分(投影軸,下圖右的兩條垂直的紅線,較長的紅線軸為變異量較大的主成份)。此範例算最大主成份的變異量為13.26,第二大主成份的變異量為1.23

PCA投影完的資料為下圖,從下圖可知,PC1的變異足以表示此筆資料資訊。

此做法可以有效的減少維度數,但整體變異量並沒有減少太多,此例從兩個變成只有一個,但變異量卻可以保留(13.26/(13.26+1.23)= 91.51%),兩維度的資料做PCA,對資料進行降維比較沒有感覺,但講解圖例比較容易。

統計學觀點

主成份分析在統計學是放在多變量分析內去教,既然放在「多變量分析」就是說我們的資料變數非常多,所以我們要去分析這麼多變數,而主成份分析則是從資料變數中想找到一些主要成份出來,假設我們有100個變數,我們沒有辦法人工去分析100個變數是吧,所以藉由主成份分析可以只取幾個重要的主成份出來處理。

統計學要怎麼決定多少主要成分出來?

答案是從由累積貢獻比率 (Cumulative Proportion)去決定需要取多少主要成分出來。

累積貢獻比率 (Cumulative Proportion)是什麼?

從最重要的主成份開始往次重要的主成份到最不重要的主成份的變異量百分比累積(好饒舌)

剛剛的例子有兩個變數,解出來的PC有

我在網路上找一個變數較多的例子,假設有4個變數(X1~X4),所以萃取出的主成份會有(PC1~PC4),累積貢獻比率則是看前幾個主成份可以表是原始資料多少百分比的變異量,此範例只需取兩個主成份(PC1和PC2)則可以取得原資料的100.000%的變異量,所以只需要2個主成份即可以取代原本4個變數然後進行後續的分類或是預測。

基本上統計學只講到如此,要繼續分析每個主成份的蘊含的因素是什麼,則是因素分析(Factor Analysis)在幹的事情,你就去看這個主成分特徵內在那些原始變數的權重大,然後在人工歸類這個萃取出的主成分屬於什麼類別,對因素分析有興趣的可以網路在找找文獻。

Note: 主成份分析是希望資料投影後資料的變異量會最大化,獨立成份分析則是希望資料投影後,投影的資料軸跟軸之間彼此是統計獨立。機器/統計學習的方法和目的都差不多,只是在前提假設不同情況下就會多一種分析方法,但大多大同小異,手法也差不多。

以下附上相對應的MATLAB codepython code連結

--

--

Tommy Huang

怕老了忘記這些吃飯的知識,開始寫文章記錄機器/深度學習相關內容。Medium現在有打賞功能(每篇文章最後面都有連結),如果覺得寫的文章不錯,也可以Donate給個Tipping吧。黃志勝 Chih-Sheng Huang (Tommy), mail: chih.sheng.huang821@gmail.com