1. 程式人生 > >主成分分析(PCA)與Kernel PCA

主成分分析(PCA)與Kernel PCA

本部落格在之前的文章【1】中曾經介紹過PCA在影象壓縮中的應用。其基本思想就是設法提取資料的主成分(或者說是主要資訊),然後摒棄冗餘資訊(或次要資訊),從而達到壓縮的目的。本文將從更深的層次上討論PCA的原理,以及Kernel化的PCA。

首先我們來考察一下,這裡的資訊冗餘是如何體現的。如下圖中的左圖所示,我們有一組二維資料點,從圖上不難發現這組資料的兩個維度之間具有很高的相關性。因為這種相關性,我們就可以認為其實有一個維度是冗餘的,因為當已知其中一個維度時,便可以據此大致推斷出另外一個維度的情況。


為了剔除資訊冗餘,我們設想把這些資料轉換到另外一個座標系下(或者說是把原座標系進行旋轉),例如像上圖中的右圖所示之情況,當然這裡通過平移設法把原資料的均值變成了零。下圖中的左圖是經過座標系旋轉之後的資料點分佈情況。你可以看出,原資料點的兩個維度之間的相關性已經被大大削弱(就這個例子而言幾乎已經被徹底抹消)。


同時你也會發現在新座標系中,橫軸這個維度x相比於縱軸那個維度y所表現出來的重要性更高,因為從橫軸這個維度上更大程度地反應出了資料分佈的特點。也就是說,本來需要用兩個維度來描述的資料,現在也能夠在很大程度地保留資料分佈特點的情況下通過一個維度來表達。如果我們僅保留x這個維度,而捨棄y那個維度,其實就起到了資料壓縮的效果。而且,捨棄y這個維度之後,我們再把資料集恢復到原座標系上,你會發現關於資料分佈情況的資訊確實在很大程度上得以保留了(如上圖中的右圖所示)。

上面所描述的也就是PCA要達到的目的。但是,如何用數學的語言來描述這個目的呢?或者說,我們要找到一個變換使得座標系旋轉的效果能夠實現削弱相關性

或將主要資訊集中在少數幾個維度上這一任務,應該如何確定所需之變換(或者座標系旋轉的角度)呢?我們還是來看一個例子,假設現在有如下圖所示的一些資料,它們形成了一個橢圓形狀的點陣,那麼這個橢圓有一個長軸和一個短軸。在短軸方向上,資料變化很少;相反,長軸的方向資料分散得更開,對資料點分佈情況的解釋力也就更強。


那麼數學上如何定義資料“分散得更開”這一概念呢?沒錯,這裡就需要用到方差這個概念。如下圖所示,現在有5個點,假設有兩個座標軸w和v,它們的原點都位於O。然後,我們分別把這5個點向w和v做投影,投影后的點再計算相對於原點的方差,可知在v軸上的方差要大於w軸上的方差,所以如果把原座標軸旋轉到v軸的方向上,相比於旋轉到w軸的方向上,

資料點會分散得更開!


或者來看動圖:


Suppose are training samples with zero mean. The goal of PCA is to find a set of vectors in space containing the max amount of variance in the data.

上圖中的一點 xj 向 v 軸做投影,所得之投影向量為


其中θ是向量Oxj與v的夾角。如果這裡的向量v是單位向量,則有


這同時表明其係數其實就是內積


The projections of the all pixels xj onto this normalized direction v are


The variance of the projections is


其中,C是協方差矩陣,關於協方差矩陣(Covariance matrix)可以參考【3】。

因為vTCv 就是 variance,而我們的目標是最大化variance,因此 the first principal vector can be found by the following equation:


鑑於是帶等式約束的優化問題,遂採用拉格朗日乘數法,寫出拉格朗日乘數式如下:


然後將上式對vλ求導,並令導數等於0,則有


於是我們知道,原來的argmax式子就等價於find the largest eigenvalue of the following eigenvalue problem:


注意我們前面的argmax式子要算的是使得vTCv 達到最大的v,而v可以由上式解出,據此再來計算vTCv ,則有


也就是說我們要做的就是求解Cv=λv,從而得到一個最大的λ,而這個λ對應特徵向量v所指示的就是使得variance最大的方向。Projections of the data on the principal axes are called 主成分, also known as PC scores。注意因為v是單位向量,所以xj 向 v 軸做投影所得之 PC score 就是 vT·xj。而且這也是最大的主成分方向。如果要再多加的一個方向的話,則繼續求一個次大的λ,而這個λ對應特徵向量v所指示的就是使得variance第二大的方向,並以此類推。

更進一步,因為C是Covariance matrix,所以它是對稱的,對於一個對稱矩陣而言,如果它有N個不同的特徵值,那麼這些特徵值對應的特徵向量就會彼此正交。如果把Cv=λv,中的向量寫成矩陣的形式,也就是採用矩陣對角化(特徵值分解)的形式,則有C=VΛVTwhere V is a matrix of eigenvectors (each column is an eigenvector) and Λ is a diagonal matrix with eigenvalues λi in the decreasing order on the diagonal. The eigenvectors are called principal axes or principal directions of the data.

注意到Covariance matrix(這裡使用了前面給定的零均值假設)


如果令,其xi 表示一個列向量,則有


Projections of the data on the principal axes are called principal components, also known as PC scores; these can be seen as new, transformed, variables. The j-th principal component is given by j-th column of XV. The coordinates of the i-th data point in the new PC space are given by the i-th row of XV。

Kernel PCA

下面,我們來推導引入Kernel版的PCA,關於Kernel的一些內容請參考文獻【5】。其實,Kernel版的PCA思想是比較簡單的,我們同樣需要求出Covariance matrix C,但不同的是這一次我們要再目標空間中來求,而非原空間。


如果令,則Φ(xi)表示xi被對映到目標空間後的一個列向量,於是同樣有


C和XTX具有相同的特徵向量。但現在的問題是Φ是隱式的,我們並不知道。所以,我們需要設法藉助核函式K來求解XTX

因為核函式K是已知的,所以如下所示XXT是可以算得的。


注意到XTX並不等於XXT,但二者之間肯定存在某種關係。所以我們設想是否可以用K來計算XTX

The eigenvalue problem of K=XXT is (XXT)u = λu。現在我們需要的是XTX,所以把上述式子的左右兩邊同時乘以一個XT,從而構造出我們想要的,於是有

XT(XXT)u = λXTu

(XTX)(XTu)=λ(XTu)

這就意味著XTu就是XTX的特徵向量!儘管,此處特徵向量的norm並不一定為1。為了保證eigenvector 的 norm為1,我們用eigenvector除以其自身的長度。注意K=XXT,而Ku=λu,


上式中仍然是未知的,所以v仍然未知。但是也不要緊,因為我們可以直接設法求投影,因為我們的最終目的仍然是計算所以Φ(xj) 向 v 軸做投影所得之 PC score 就是 vT·Φ(xj)。如下


綜上,便得到了核化版的PCA的計算方法。我們再做扼要總結如下:

Solve the following eigenvalue problem:


The projection of the test sample Φ(xj) on the i-th eigenvector can be computed by


所得之vTi·Φ(xj)即為特徵空間(Feature space)中沿著vi方向的座標。

最後我們給出的是一個KPCA的例子。其中左圖是用傳統PCA畫出的投影。右圖是在高維空間中找到投影點後又轉換回原空間的效果。可見,加了核函式之後的PCA變得更加強大了。


參考文獻與推薦閱讀材料

【1】http://blog.csdn.net/baimafujinji/article/details/50373143

【2】部分圖片來自李政軒博士的線上授課視訊

【3】http://blog.csdn.net/baimafujinji/article/details/50372906