PCA主成分分析方法


PCA: Principal Components Analysis,主成分分析。

1、引入

  在對任何訓練集進行分類和回歸處理之前,我們首先都需要提取原始數據的特征,然后將提取出的特征數據輸入到相應的模型中。但是當原始數據的維數特別高時,這時我們需要先對數據進行降維處理,然后將降維后的數據輸入到模型中。

  PCA算法是專門用來對高維數據進行降維而設計,通過將高維數據降維后得到的低維數能加快模型的訓練速度,並且低維度的特征具有更好的可視化性質。另外,數據的降維會導致一定的信息損失,通常我們可以設置一個損失閥值來控制信息的損失。

  設原始樣本集為:,即樣本數為m個,每個樣例有n個特征維度。

 

2、預處理

  在使用PCA降維之前,樣本集需要滿足兩個條件:

  1)特征去均值化(即均值零化)。對每個特征,使用當前特征的值減去該維特征的平均值。對第i個樣例的第j個特征,計算公式為:

  其中第i個特征的均值為:

  當處理自然圖像時,則將每個特征減去圖像本身的均值,而不是減去該特征的均值。即:

  為何需要去均值?這主要是去除均值對變換的影響,減去均值后數據的信息量沒有變化,即數據的區分度(方差)是不變的。如果不去均值,第一主成分,可能會或多或少的與均值相關。[5]

  2)歸一化處理:將不同特征的數據范圍歸一化到同一范圍中,一般將每個值除以當前維的最大值。

 

3、PCA算法

  PCA算法的核心思想在於找出數據變化的主方向和次方向,如圖3.1所示,向量u1 的方向可以認為是數據的主方向,而u2是次方向。

圖3.1 數據變化的主次方向[1]

  那么如何得到數據變化的主次方向?假設樣本集有m個樣例,每個樣例有n個特征。樣本集可以表示為:

  第i個樣例的特征向量表示為:

  則樣本集的協方差矩陣為:

  協方差矩陣為n*n大小的方陣,具有n個特征向量。

  其中協方差計算公式為:

  計算協方差矩陣的特征向量及對應的特征值。

  將特征向量按特征值的大小按列排放,組成矩陣u=[u1 u2 … un],對應的特征值由大到小分別為:。則特征向量u1為主特征向量(對應的特征值最大),u2為次特征向量,以此類推。

  對於特征值越大的特征向量,樣本集在該方向上的變化越大。對於由特征向量組成的矩陣我們稱為特征矩陣,特征矩陣是一個正交矩陣,即滿足uTu=uuT=I。

  關於協方差矩陣的計算,以及其中的一些數學原理,可以參考文獻[3,4]。

  如何理解協方差矩陣的特征向量為數據變化的主次方向,以及特征值越大,其對應的特征向量方向上的數據變化越大?

  答:使用協方差矩陣計算出來的特征值為其特征向量上的樣本集的方差,當方差越大,說明數據集在該特征向量方向上越分散,變化越大,所以該方向就可以用來作為數據集的主方向。

  另外,特征向量之間相互正交,說明各特征之間相關性最小,基本接近0.

  獨立==>不相關<==>協方差為零

  至此,我們已經得到了數據變化的主次方向,現在我們需要計算樣本在每個特征向量上的長度。對於原始樣例x,其在特征向量u1方向上的長度為:

  現在我們使用特征矩陣來對樣本進行旋轉:

  旋轉后的坐標變換成了:(u1, u2, …, un)。

  現在若要將變換后的數據進行恢復,因為特征矩陣為正交矩陣,所以只需左乘特征矩陣的轉置即可:

  因為:

PCA算法過程[3]:(樣本集有m個樣例,每個樣例n個特征)

1)將原始數據組成一個n*m大小的矩陣。

2)對矩陣的每行進行零均均值化處理,即對每個特征減去該行的均值。

3)計算協方差矩陣,這個過程叫

4)求出協方差矩陣的所有特征向量及對應的特征值。

5)根據特征值從大到小對應的特征向量,取出前k個特征向量組成一個特征矩陣u。

6)將原始數據旋轉到特征矩陣u所在的空間中,,得到的數據即為降維后的結果。

 

4、損失誤差分析

  在上一步中利用協方差矩陣計算得到n個特征向量,但是我們實際上只使用了前k個特征向量,而將后面的n-k個向量直接近似為0。

  直接將后面的特征近似為0會導致一定的損失。K的取值越大,損失的信息就越少,反之損失的信息就會越多。實際上,因為后面近似為0的特征向量對應的特征值是非常的小,故而將后面的特征近似為0不會導致過大的損失。

  具體損失可以用前k個特征值在所有特征值中所占的比例,由於協方差矩陣的特征值為方差,因而特征值之比即為方差百分比:

  其中,

  在處理圖像時,一般需要a>=0.99,而其他情況下一般只需a>=0.95即可。

  另外,PCA算法具有縮放不變性,即所有的特征分量被放大或縮小相同的倍數,PCA輸出的特征向量不會發生變化。

5、白化操作Whitening(白化算法)[2]

  白化操作主要用來去除各特征之間的關聯度,減少特征冗余。比如圖像中相鄰像素有一定的關聯性,很多信息是冗余的,這時去相關可以采用白化操作。

  白化操作主要完成兩件事情:首先使得不同特征之間的相關性最小,接近0;其次是所有特征的方差相等。

  常見的白化操作有:

  1)PCA whitening。在利用PCA得到協方差矩陣的特征向量后,取前k個特征向量,各特征向量相互正交,此時相關性最小;再將新數據(旋轉后的數據)的每一維除以標准差即得到每一維的方差為1。方差歸一化:

  pw: PCA white。

  2)ZCA whitening。首先利用協方差矩陣計算出所有的特征向量后,將所有特征向量取出,再進行方差的歸一化操作,最后左乘特征矩陣u(其實相當於把數據還原回去)。

  它並不降低數據維度,而僅僅在PCA白化的步驟中保留所有成分,最后增加了一個旋轉的步驟,這樣仍然是單位方差。

 

 

6、總結

  PCA算法非常巧妙地利用協方差矩陣來計算出樣本集在不同方向上的分散程度,利用方差最大的方向作為樣本集的主方向。其主要過程是:首先利用樣本集及特征構建一個樣本矩陣,然后利用樣本矩陣計算得到協方差矩陣,再計算協方差矩陣的特征值和特征向量,保留特征值前k大的特征向量作為新的維度方向。再將原始樣本數據轉換到新的空間維度。

        

 

 

參考文獻:

[1] peghoty, http://blog.csdn.net/itplus/article/details/11451327

[2] tornadomeet, http://www.cnblogs.com/tornadomeet/archive/2013/03/21/2973231.html

[3] CodingLabs, http://blog.codinglabs.org/articles/pca-tutorial.html

[4] peghoty, http://blog.csdn.net/itplus/article/details/11452743

[5] viewcode, http://blog.csdn.net/viewcode/article/details/8789524

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM