【Python機器學習】之 PCA 算法(一)

PCA 原理

1、PCA 原理推導

​ 假設有 M 個樣本 x1,x2,...,xmx_1, x_2, ..., x_m ,每個樣本點 xix_i 含有 N 個特徵,則每個樣本數據可以表示爲: xi=(xi(1),(xi(2),...,(xi(n))x_i =( x^{(1)}_i, (x^{(2)}_i,..., (x^{(n)}_i),整體樣本數據在 N 維特徵空間的原始座標系爲 I=(i1,i2,...,in)I=(i_1, i_2, ..., i_n)II 是一組標準正交基,即有如下性質:
is2= 1isTit= 0 , st \begin{aligned} ||i_s||_2 =& \ 1 \\ i_s^T \cdot i_t =& \ 0 \ , \ s ≠ t \end{aligned}
​ 樣本點 xix_i 在原始座標系中的表示爲:
xi=(i1,i2,...,in)(xi(1)xi(2)xi(n)) , i=1,2,3...,m x_i= (i_1, i_2, ...,i_n)\cdot \begin{pmatrix} x^{(1)}_i \\ x^{(2)}_i \\ \vdots \\ x^{(n)}_i \end{pmatrix} \ , \ i=1,2,3...,m
​ 假設進行線性變換之後得到的新的座標系爲 J=(j1,j2,...,jn)J=(j_1, j_2, ..., j_{n'})JJ 同樣是一組標準正交基,即滿足上述正交基的性質。則樣本點 xix_i 在新的座標系中的近似表示爲:
xi=(j1,j2,...,jn)(zi(1)zi(2)zi(n)) , i=1,2,3...,m \mathop{{x_i}}\limits^{\sim } = (j_1, j_2, ...,j_{n'})\cdot \begin{pmatrix} z^{(1)}_i \\ z^{(2)}_i \\ \vdots \\ z^{(n')}_i \end{pmatrix} \ , \ i=1,2,3...,m
​ 根據正交基的性質, jsj_s 可以等價於:
js=(i1,i2,...,in)(jsi1jsi2jsin) , s=1,2,3...,m j_s= (i_1, i_2, ...,i_n)\cdot \begin{pmatrix} j_s \cdot i_1 \\ j_s \cdot i_2 \\ \vdots \\ j_s \cdot i_n \\ \end{pmatrix} \ , \ s=1,2,3...,m'
​ 令:
ws=(jsi1jsi2jsin) , s=1,2,3...,m w_s= \begin{pmatrix} j_s \cdot i_1 \\ j_s \cdot i_2 \\ \vdots \\ j_s \cdot i_n \\ \end{pmatrix} \ , \ s=1,2,3...,m'
​ 則 wsw_s 是一個新的基向量,其各分量就是基向量 jsj_s 在原始座標系 (i1,i2,...,in)(i_1, i_2, ..., i_n) 中的投影。所以,jsj_s 可以寫爲:
js=(i1,i2,...,in)ws , s=1,2,...,n j_s = (i_1, i_2, ...,i_n)\cdot w_s \ , \ s =1 ,2 ,..., n'
​ 根據正交基性質,有 ws2 = 1 , wsTwt= 0 , st||w_s||_2\ =\ 1 \ , \ w_s^T \cdot w_t = \ 0 \ , \ s≠t

​ 類似的有 w1,w2,...,wnw_1,w_2,...,w_{n'},將其寫成矩陣形式爲:
W=[w1,w2,...,wN]=(j1i1j2i1jni1j1i2j2i2jni2j1inj2injnin) W = [w_1, w_2, ...,w_{N'}] = \begin{pmatrix} j_1 \cdot i_1 & j_2 \cdot i_1 & \cdots & j_{n'} \cdot i_1\\ j_1 \cdot i_2 & j_2 \cdot i_2 & \cdots & j_{n'} \cdot i_2\\ \vdots & \vdots & \ddots & \vdots \\ j_1 \cdot i_n & j_2 \cdot i_n & \cdots & j_{n'} \cdot i_n\\ \end{pmatrix}
​ 則 W 就稱爲座標變換矩陣,且有 W=WT, WWT=IW = W^T, \ WW^T =I 。根據座標變換矩陣,新座標系和原始座標系直接的關係可以表示爲:
(j1,j2,...,jn)=(i1,i2,...,in)W (j_1, j_2, ...,j_{n'}) = (i_1, i_2, ...,i_n)\cdot W
​ 將其帶入前面 xix_i 在新座標系中的近似表達式,可得:
xl=(j1,j2,...,jn)(zi(1)zi(2)zi(n))=(i1,i2,...,in)W(zi(1)zi(2)zi(n)) \mathop{{x_l}}\limits^{\sim} = (j_1, j_2, ...,j_{n'})\cdot \begin{pmatrix} z^{(1)}_i \\ z^{(2)}_i \\ \vdots \\ z^{(n')}_i \end{pmatrix} = (i_1, i_2, ...,i_n) W \cdot \begin{pmatrix} z^{(1)}_i \\ z^{(2)}_i \\ \vdots \\ z^{(n')}_i \end{pmatrix}
​ 再將其與 xix_i 在原始座標系中的表達式 xi=(i1,i2,...,in)(xi(1)xi(2)xi(n))x_i = (i_1, i_2, ...,i_n)\cdot \begin{pmatrix}x^{(1)}_i \\ x^{(2)}_i \\\vdots \\ x^{(n)}_i \end{pmatrix} 比較可知,通過座標變換來降維,相當於是用 WziWz_i 去近似表示了 xix_i ,使:
xi=Wzi x_i = W z_i
​ 即:
zi=W1xi=WTxi z_i = W^{-1}x_i=W^Tx_i
​ 則有:
zi=wsTxi ,s=1,2,3...,n z_i = w_s^Tx_i \ , \quad\quad\quad\quad s=1,2,3...,n'

一般,nn' 會遠小於 nn ,這樣就可以達到降維的目的了。將維度由 MM 降到 MM' ,相當於人爲的丟棄了部分座標。我們的要求是:基於將爲後的座標重構樣本時,得到的重構樣本與原始原本座標儘量相同。對於樣本點 xix_i 來說,即要使 WziW z_ixix_i 的距離最小化,推廣到整體樣本點,即
mini=1MWzixi22 min \sum\limits_{i=1}^M|| W z_i - x_i ||^2_2
​ 先計算 Wzixi22|| W z_i - x_i ||^2_2,即
i=1MWzixi22=(i=1MxiTxi)tr[WT(i=1MxiTxi)W]=(i=1MxiTxi)tr(WTXXTW) \sum\limits_{i=1}^M|| W z_i - x_i ||^2_2 \\ \begin{aligned} &= (\sum\limits_{i=1}^Mx_i^Tx_i) - tr[W^T(\sum\limits_{i=1}^Mx_i^Tx_i)W] \\ &= (\sum\limits_{i=1}^Mx_i^Tx_i) - tr(W^TXX^TW) \end{aligned}
​ 因爲對於給定 M 個樣本,i=1nxiTxi\sum\limits^n_{i=1}x_i^Tx_i 是一個固定值,因此最小化上面的結果等價於:
min tr(WTXXTW)s.t.WTW=I min \ - tr(W^TXX^TW) \\ s.t. \quad W^TW=I
​ 構造拉格朗日函數:
L(W)=tr(WTXXTW)+λ(WTWI) L(W) = - tr(W^TXX^TW) + \lambda(W^TW-I)
​ 對 WW 求導,可得:

XXTW+λW=0 -XX^TW + \lambda W = 0

​ 移項可得;
XXTW=λW XX^TW = \lambda W

可以看出,座標變換矩陣 WWXXTXX^TMM' 個特徵向量組成的矩陣,而 λ\lambdaXXTXX^T 的特徵值。當我們將原始數據集從 NN 維降到 NN’ 維時,只需要找到 XXTXX^T 最大的 NN’ 個特徵值對應的特徵向量,將其組成座標變換矩陣(投影矩陣) WW ,然後利用zi=WTxiz_i = W^Tx_i 即可實現降維的目的


文中實例及參考:

  • 《機器學習基礎》

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