前兩天面試問到了PCA,感覺講得不是很透徹,這里再次詳細寫一下。
首先定義如下變量的含義:
X:Rn*m,n個樣本m個屬性,對於第i個樣本xi:R1*m。
W:Rm*k,k個正交的單位正交的列向量組成的矩陣,投影矩陣,把原來的m維降到k維。對於第i個維度wi:Rm*1。
投影后的樣本矩陣X' = X×W:Rn*k,對於投影后的第i個樣本xi' = xi×W:R1*k。
我們做PCA的目的是找出一個投影矩陣W(也就是k個單位向量)使得樣本投影后的方差最大。其實理解了加粗的這句話,就已經對PCA有相當的了解了。如何理解方差最大?答:方差大說明投影后的樣本之間相互分離程度比較好,相比於較小的方差,原樣本的特征得到了有效保存。這個方差從數學上表示為投影到各個維度的方差之和。
記住,作PCA之前要做的一件事是對原始樣本矩陣X,按列中心化。比如對 Xij ==> Xij-M(j),其中M(j)表示第j列(也就是第j種屬性)的均值。為什么要這么做?這是因為這個操作使得X每一列均值為0,可以大大簡化后面計算方差的公式。(D(a)=E( (a-avg(a))·(a-avg(a)) ),如果avg(a)=0,那么D(a)=E(a^2))
對投影后的矩陣X' = X×W,因為X被我們按列中心化了,即∑xi=0,那么∑xi' = ∑ (xi×W) = (∑xi)×W = 0,也就是說投影后列均值為0的性質依然得到了保持。
接下來,我們考慮要優化的目標,方差。先考慮將所有樣本投影到單個維度wi的情況,即X×wi:Rn*1,他表示這n個樣本分別在這一個維度的坐標。
根據上面的分析,有∑ (xi×wi)=0,即E(X*wi)=0,(注意此處要把wi看成是定值)。於是就有了下面的推算:

對所有投影方向的方差進行求和,加上原來每個投影向量長度為1的約束,就得到了我們下面的優化問題。

由於是等式約束,我們很容易就可以寫成拉格朗日形式如下,(λ前面漏掉了求和符號,sorry)

是的對wi求導,得到如下(由於λ是拉格朗日乘子,本身它的乘數不需要關心)

顯然,△等式的wj和λ的解就是XTX做特征值分解對應的特征向量和特征值。
那么,有了特征值分解后,我們應該選哪些特征向量及其對應的特征值呢? 都知道是從最大的開始選,為什么呢?
對△等式進行簡單變化,等式兩邊同時左乘wjT,變成下面的等式,

注意到,該等式說明了特征值λj對應的就是wj方向投影的方差,而我們的目標是要最大化所有的方差和。可選的范圍是固定,顯然我們從大的特征值開始選就行了。這就從數學上解釋了為什么我們要從大的特征值開始進行選擇(面試的時候問到了,當時只進行感性上的解釋,確實沒有這樣列出來有說服力)。
還有一個trick要注意的是,如果給出了低維空間中的坐標,要復原在原空間的坐標時,要對每一個維度加上對應的均值,這是因為在做PCA之前進行了中心化處理。
怎么樣? 是不是與書籍上的寫法不一樣呢?
