1. 程式人生 > >主成分分析(Principal Component Analysis,PCA)詳解

主成分分析(Principal Component Analysis,PCA)詳解

PCA是非常重要的統計方法,其實際應用非常廣泛,但是很多講解太過於公式化,很難讓初學者消化,本文將從一個實際例子出發,並對數學公式原理及推導過程作出詳細解釋,即使你的數學基礎比較差,在看完這篇部落格之後,相信你會對PCA會有一個透徹的認知。

PCA的思想就是將n維特徵對映到k維上(k<n),這k維是重新構造出來的全新維度特徵,而不是簡單的從n維特徵去除n-k維特徵,這k維就是主成分。

1.導讀


如圖所示,在三維座標系中,四種顏色的標記界限並不直觀,但是在重新定義的二維座標系中,四種顏色標記界限非常直觀,這就是一個典型的PCA,在降維的同時最大程度的保留了資料的特徵,為後續的分析提供更直觀的支援。

上圖PCA過程中有兩步非常重要,一是尋找差異最明顯的PC1、PC2座標系所在的平面,二是如何把Gene1、Gene2、Gene3座標系中的點對映到PC1、PC2的座標系中。這也是所有PCA非常重要的兩步,一是尋找差異最明顯座標系的新維度,二是把之前多維座標系中的點對映到新維度的座標系中。

2.PCA步驟

廢話不多說,我們首先來看一下PCA的步驟,一步步的去理解。

1.對資料中心化

2.求特徵的協方差矩陣

3.求協方差矩陣的特徵值和特徵向量

4.取最大的k個特徵值所對應的特徵向量

5.將樣本點投影到選取的特徵向量上

看到這裡呢,可能很多人不理解,而且有些數學概念不清楚,這都沒關係,通過下面的例子你再看這五個步驟你會發現原來如此。

3.PCA例項

現在假設有一組資料如下:


行代表了樣例,列代表維度,這裡有10個樣例,每個樣例兩個維度。我們如何用一個維度來表示這10個樣例。這個可以理解為在直角座標系的中的十個點,如何找到一個直線,這個直線就是全新的維度,是主成分。讓10個樣例對映到這個直線上,得到的劃分最明顯。

第一步:資料中心化。中心化指的是中心化是指資料集中的各項資料減去資料集的均值,中心化的目的是提高訓練速度。我們分別求x和y的平均值,然後對於所有的樣例,都減去對應的均值。這裡x的均值是1.81,y的均值是1.91,那麼第一個樣例減去均值後即為(0.69,0.49),同理得到


第二步:求特徵的協方差矩陣。這裡簡單的介紹下協方差矩陣,大家都知道方差是用來度量單個變數 “ 自身變異”大小的總體引數,方差越大表明該變數的變異越大。方差一般是用來描述一維資料的,但是我們嚐嚐面對多維的資料集,比如這個例項目前就是二維的,這時候我們就可以用協方差來度量兩個變數之間 互相影響大小的引數。如果結果是正,說明兩個變數是正相關。如果結果為負,說明兩個變數是負相關。協方差的絕對值越大,則二個變數相互影響越大 ,反之則越小。協方差矩陣代表了樣本集在不同維度之間的方差,我們可以理解為

協方差矩陣就是來度量各個維度偏離其均值的程度,也就是不同維度之間互相影響的相關性,首先我們來對比一下方差和協方差公式來加深理解:



接下來看一下方差矩陣的表示,我這裡沒找到二維協方差矩陣的表示,用三維協方差矩陣表示一下:


二維和更多維的同理,這裡求的協方差矩陣為:


第三步:求協方差矩陣的特徵值和特徵向量。

通過上一步,我們已經建立起每個維度之間互相影響相關性的矩陣,絕對值高表示相關度高,絕對值低表示相關性低。我們理想的一維(也就是最終的直線)應該與更多相關性高的方向垂直,這樣可以找到一條直線,使二維中的點最大程度的投影在不同的區域,雖然維度降低,但是每個點之間的區分依然非常明顯。這是PCA最關鍵的地方,比較抽象,但是想明白了就覺得很簡單。那麼我們如何去確定相關性高的方向呢?我們可以用協方差的特徵值和特徵向量來計算準確的方向。其實協方差的特徵向量表示樣本集的相關性集中分佈在這些方向,而特徵值就;反映了樣本集在該方向上的相關性大小。PCA正是基於這一點,尋找區分最明顯的方向,防止降維使樣本集區分不開的狀況。

特徵值和特徵向量的計算公式在這裡就不詳細介紹,因為佔用空間比較多,不懂得可以看一下這篇部落格:特徵值和特徵向量

經過計算,我們得到協方差的特徵值和特徵向量如下:


第四步:取最大的k個特徵值所對應的特徵向量。將特徵值按照從大到小的順序排序,選擇其中最大的k個,然後將其對應的k個特徵向量分別作為列向量組成特徵向量矩陣。
這裡特徵值只有兩個,我們選擇其中最大的那個,這裡是1.28402771,對應的特徵向量是(-0.677873399, -0.735178656)T。這裡特徵向量的方向也就是我們最終理想直線的方向。

第五步:將樣本點投影到選取的特徵向量上。將樣本點投影到選取的特徵向量上。假設樣例數為m,特徵數為n,減去均值後的樣本矩陣為DataAdjust(m*n),協方差矩陣是n*n,選取的k個特徵向量組成的矩陣為EigenVectors(n*k)。那麼投影后的資料FinalData為FinalData(10*1) = DataAdjust(10*2矩陣) x 特徵向量(-0.677873399,-0.735178656)T,得到的結果是


這樣,就將原始樣例的2維特徵變成了1維,這1維就是原始特徵在1維上的投影。現在大家回頭看第二部分的PCA步驟大綱是不是柳暗花明?