機器學習降維算法一:PCA (Principal Component Analysis)

http://www.cnblogs.com/xbinworld/archive/2011/11/24/pca.html


言:

機器學習領域中所謂的降維就是指採用某種映射方法,將原高維空間中的數據點映射到低維度的空間中。降維的本質是學習一個映射函數 f : x->y,其中x是原始數據點的表達,目前最多使用向量表達形式。 y是數據點映射後的低維向量表達,通常y的維度小於x的維度(當然提高維度也是可以的)。f可能是顯式的或隱式的、線性的或非線性的。

當然還有一大類方法本質上也是做了降維,叫做feature selection,目的是從原始的數據feature集合中挑選一部分作爲數據的表達。

目前大部分降維算法處理向量表達的數據,也有一些降維算法處理高階張量表達的數據。

之所以使用降維後的數據表示是因爲:

(1)在原始的高維空間中,包含有冗餘信息以及噪音信息,在實際應用例如圖像識別中造成了誤差,降低了準確率;而通過降維,我們希望減少冗餘信息所造成的誤差,提高識別(或其他應用)的精度。

(2)或者希望通過降維算法來尋找數據內部的本質結構特徵。

(3)通過降維來加速後續計算的速度

(4)還有其他很多目的,如解決數據的sparse問題

在很多算法中,降維算法成爲了數據預處理的一部分,如PCA。事實上,有一些算法如果沒有降維預處理,其實是很難得到很好的效果的。


如果你需要處理數據,但是數據原來的屬性又不一定需要全部保留,那麼PCA也許是一個選擇。

 

主成分分析算法(PCA

Principal Component Analysis(PCA)是最常用的線性降維方法,它的目標是通過某種線性投影,將高維的數據映射到低維的空間中表示,並期望在所投影的維度上數據的方差最大,以此使用較少的數據維度,同時保留住較多的原數據點的特性。

通俗的理解,如果把所有的點都映射到一起,那麼幾乎所有的信息(如點和點之間的距離關係)都丟失了,而如果映射後方差儘可能的大,那麼數據點則會分散開來,以此來保留更多的信息。可以證明,PCA是丟失原始數據信息最少的一種線性降維方式。(實際上就是最接近原始數據,但是PCA並不試圖去探索數據內在結構)

n維向量w爲目標子空間的一個座標軸方向(稱爲映射向量),最大化數據映射後的方差,有:

其中m是數據實例的個數, xi是數據實例i的向量表達, x拔是所有數據實例的平均向量。定義W爲包含所有映射向量爲列向量的矩陣,經過線性代數變換,可以得到如下優化目標函數:

   W'W=I是說希望結果的每一個feature都正交,這樣每一維度之間不會有冗餘信息。

 

 其中tr表示矩陣的跡,A是數據協方差矩陣。

容易得到最優的W是由數據協方差矩陣前k個最大的特徵值對應的特徵向量作爲列向量構成的。這些特徵向量形成一組正交基並且最好地保留了數據中的信息。

PCA的輸出就是Y = W'X,由X的原始維度降低到了k維。因此不知道推導也無所謂,只要會算就行,注意X需要均值化。

來看個例子:

 


當使用1個特徵向量的時候,3的基本輪廓已經保留下來了,特徵向量使用的越多就越與原始數據接近

   

PCA追求的是在降維之後能夠最大化保持數據的內在信息,並通過衡量在投影方向上的數據方差的大小來衡量該方向的重要性。但是這樣投影以後對數據的區分作用並不大,反而可能使得數據點揉雜在一起無法區分。這也是PCA存在的最大一個問題,這導致使用PCA在很多情況下的分類效果並不好。具體可以看下圖所示,若使用PCA將數據點投影至一維空間上時,PCA會選擇2軸,這使得原本很容易區分的兩簇點被揉雜在一起變得無法區分;而這時若選擇1軸將會得到很好的區分結果。

   

Discriminant Analysis所追求的目標與PCA不同,不是希望保持數據最多的信息,而是希望數據在降維後能夠很容易地被區分開來。後面會介紹LDA的方法,是另一種常見的線性降維方法。另外一些非線性的降維方法利用數據點的局部性質,也可以做到比較好地區分結果,例如LLELaplacian Eigenmap等。以後會介紹。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章