主成分分析(Principal components analysis,如下簡稱PCA)是最重要的降維方法之一。在數據壓縮消除冗餘和數據噪音消除等領域都有普遍的應用。通常咱們提到降維最容易想到的算法就是PCA,下面咱們就對PCA的原理作一個總結。算法
PCA顧名思義,就是找出數據裏最主要的方面,用數據裏最主要的方面來代替原始數據。具體的,假如咱們的數據集是n維的,共有m個數據$(x^{(1)},x^{(2)},...,x^{(m)})$。咱們但願將這m個數據的維度從n維降到n'維,但願這m個n'維的數據集儘量的表明原始數據集。咱們知道數據從n維降到n'維確定會有損失,可是咱們但願損失儘量的小。那麼如何讓這n'維的數據儘量表示原來的數據呢?函數
咱們先看看最簡單的狀況,也就是n=2,n'=1,也就是將數據從二維降維到一維。數據以下圖。咱們但願找到某一個維度方向,它能夠表明這兩個維度的數據。圖中列了兩個向量方向,$u_1$和$u_2$,那麼哪一個向量能夠更好的表明原始數據集呢?從直觀上也能夠看出,$u_1$比$u_2$好。學習
爲何$u_1$比$u_2$好呢?能夠有兩種解釋,第一種解釋是樣本點到這個直線的距離足夠近,第二種解釋是樣本點在這個直線上的投影能儘量的分開。優化
假如咱們把n'從1維推廣到任意維,則咱們的但願降維的標準爲:樣本點到這個超平面的距離足夠近,或者說樣本點在這個超平面上的投影能儘量的分開。component
基於上面的兩種標準,咱們能夠獲得PCA的兩種等價推導。blog
咱們首先看第一種解釋的推導,即樣本點到這個超平面的距離足夠近。ip
假設m個n維數據$(x^{(1)}, x^{(2)},...,x^{(m)})$都已經進行了中心化,即$\sum\limits_{i=1}^{m}x^{(i)}=0$。通過投影變換後獲得的新座標系爲$\{w_1,w_2,...,w_n\}$,其中$w$是標準正交基,即$||w||_2=1, w_i^Tw_j=0$。內存
若是咱們將數據從n維降到n'維,即丟棄新座標系中的部分座標,則新的座標系爲$\{w_1,w_2,...,w_{n'}\}$,樣本點$x^{(i)}$在n'維座標系中的投影爲:$z^{(i)} = (z_1^{(i)}, z_2^{(i)},...,z_{n'}^{(i)})^T$.其中,$z_j^{(i)} = w_j^Tx^{(i)}$是$x^{(i)}$在低維座標系裏第j維的座標。ci
若是咱們用$z^{(i)}$來恢復原始數據$x^{(i)}$,則獲得的恢復數據$\overline{x}^{(i)} = \sum\limits_{j=1}^{n'}z_j^{(i)}w_j = Wz^{(i)}$,其中,W爲標準正交基組成的矩陣。rem
如今咱們考慮整個樣本集,咱們但願全部的樣本到這個超平面的距離足夠近,即最小化下式:$$\sum\limits_{i=1}^{m}||\overline{x}^{(i)} - x^{(i)}||_2^2$$
將這個式子進行整理,能夠獲得:
$$ \begin{align} \sum\limits_{i=1}^{m}||\overline{x}^{(i)} - x^{(i)}||_2^2 & = \sum\limits_{i=1}^{m}|| Wz^{(i)} - x^{(i)}||_2^2 \\& = \sum\limits_{i=1}^{m}(Wz^{(i)})^T(Wz^{(i)}) - 2\sum\limits_{i=1}^{m}(Wz^{(i)})^Tx^{(i)} + \sum\limits_{i=1}^{m} x^{(i)T}x^{(i)} \\& = \sum\limits_{i=1}^{m}z^{(i)T}z^{(i)} - 2\sum\limits_{i=1}^{m}z^{(i)T}W^Tx^{(i)} +\sum\limits_{i=1}^{m} x^{(i)T}x^{(i)} \\& = \sum\limits_{i=1}^{m}z^{(i)T}z^{(i)} - 2\sum\limits_{i=1}^{m}z^{(i)T}z^{(i)}+\sum\limits_{i=1}^{m} x^{(i)T}x^{(i)} \\& = - \sum\limits_{i=1}^{m}z^{(i)T}z^{(i)} + \sum\limits_{i=1}^{m} x^{(i)T}x^{(i)} \\& = -tr( W^T(\sum\limits_{i=1}^{m}x^{(i)}x^{(i)T})W) + \sum\limits_{i=1}^{m} x^{(i)T}x^{(i)} \\& = -tr( W^TXX^TW) + \sum\limits_{i=1}^{m} x^{(i)T}x^{(i)} \end{align}$$
其中第(1)步用到了$\overline{x}^{(i)}=Wz^{(i)} $,第二步用到了平方和展開,第(3)步用到了矩陣轉置公式$(AB)^T =B^TA^T$和$W^TW=I$,第(4)步用到了$z^{(i)}=W^Tx^{(i)}$,第(5)步合併同類項,第(6)步用到了$z^{(i)}=W^Tx^{(i)}$和矩陣的跡,第7步將代數和表達爲矩陣形式。
注意到$\sum\limits_{i=1}^{m}x^{(i)}x^{(i)T}$是數據集的協方差矩陣,W的每個向量$w_j$是標準正交基。而$\sum\limits_{i=1}^{m} x^{(i)T}x^{(i)}$是一個常量。最小化上式等價於:$$\underbrace{arg\;min}_{W}\;-tr( W^TXX^TW) \;\;s.t. W^TW=I$$
這個最小化不難,直接觀察也能夠發現最小值對應的W由協方差矩陣$XX^T$最大的n'個特徵值對應的特徵向量組成。固然用數學推導也很容易。利用拉格朗日函數能夠獲得$$J(W) = -tr( W^TXX^TW + \lambda(W^TW-I))$$
對W求導有$-XX^TW+\lambda W=0$, 整理下即爲:$$XX^TW=\lambda W$$
這樣能夠更清楚的看出,W爲$XX^T$的n'個特徵向量組成的矩陣,而$\lambda$爲$XX^T$的若干特徵值組成的矩陣,特徵值在主對角線上,其他位置爲0。當咱們將數據集從n維降到n'維時,須要找到最大的n'個特徵值對應的特徵向量。這n'個特徵向量組成的矩陣W即爲咱們須要的矩陣。對於原始數據集,咱們只須要用$z^{(i)}=W^Tx^{(i)}$,就能夠把原始數據集降維到最小投影距離的n'維數據集。
若是你熟悉譜聚類的優化過程,就會發現和PCA的很是相似,只不過譜聚類是求前k個最小的特徵值對應的特徵向量,而PCA是求前k個最大的特徵值對應的特徵向量。
如今咱們再來看看基於最大投影方差的推導。
假設m個n維數據$(x^{(1)}, x^{(2)},...,x^{(m)})$都已經進行了中心化,即$\sum\limits_{i=1}^{m}x^{(i)}=0$。通過投影變換後獲得的新座標系爲$\{w_1,w_2,...,w_n\}$,其中$w$是標準正交基,即$||w||_2=1, w_i^Tw_j=0$。
若是咱們將數據從n維降到n'維,即丟棄新座標系中的部分座標,則新的座標系爲$\{w_1,w_2,...,w_{n'}\}$,樣本點$x^{(i)}$在n'維座標系中的投影爲:$z^{(i)} = (z_1^{(i)}, z_2^{(i)},...,z_{n'}^{(i)})^T$.其中,$z_j^{(i)} = w_j^Tx^{(i)}$是$x^{(i)}$在低維座標系裏第j維的座標。
對於任意一個樣本$x^{(i)}$,在新的座標系中的投影爲$W^Tx^{(i)}$,在新座標系中的投影方差爲$x^{(i)T}WW^Tx^{(i)}$,要使全部的樣本的投影方差和最大,也就是最大化$ \sum\limits_{i=1}^{m}W^Tx^{(i)}x^{(i)T}W$的跡,即:$$\underbrace{arg\;max}_{W}\;tr( W^TXX^TW) \;\;s.t. W^TW=I$$
觀察第二節的基於最小投影距離的優化目標,能夠發現徹底同樣,只是一個是加負號的最小化,一個是最大化。
利用拉格朗日函數能夠獲得$$J(W) = tr( W^TXX^TW + \lambda(W^TW-I))$$
對W求導有$XX^TW+\lambda W=0$, 整理下即爲:$$XX^TW=(-\lambda)W$$
和上面同樣能夠看出,W爲$XX^T$的n'個特徵向量組成的矩陣,而$-\lambda$爲$XX^T$的若干特徵值組成的矩陣,特徵值在主對角線上,其他位置爲0。當咱們將數據集從n維降到n'維時,須要找到最大的n'個特徵值對應的特徵向量。這n'個特徵向量組成的矩陣W即爲咱們須要的矩陣。對於原始數據集,咱們只須要用$z^{(i)}=W^Tx^{(i)}$,就能夠把原始數據集降維到最小投影距離的n'維數據集。
從上面兩節咱們能夠看出,求樣本$x^{(i)}$的n'維的主成分其實就是求樣本集的協方差矩陣$XX^T$的前n'個特徵值對應特徵向量矩陣W,而後對於每一個樣本$x^{(i)}$,作以下變換$z^{(i)}=W^Tx^{(i)}$,即達到降維的PCA目的。
下面咱們看看具體的算法流程。
輸入:n維樣本集$D=(x^{(1)}, x^{(2)},...,x^{(m)})$,要降維到的維數n'.
輸出:降維後的樣本集$D'$
1) 對全部的樣本進行中心化: $x^{(i)} = x^{(i)} - \frac{1}{m}\sum\limits_{j=1}^{m} x^{(j)}$
2) 計算樣本的協方差矩陣$XX^T$
3) 對矩陣$XX^T$進行特徵值分解
4)取出最大的n'個特徵值對應的特徵向量$(w_1,w_2,...,w_{n'})$, 將全部的特徵向量標準化後,組成特徵向量矩陣W。
5)對樣本集中的每個樣本$x^{(i)}$,轉化爲新的樣本$z^{(i)}=W^Tx^{(i)}$
6) 獲得輸出樣本集$D' =(z^{(1)}, z^{(2)},...,z^{(m)})$
有時候,咱們不指定降維後的n'的值,而是換種方式,指定一個降維到的主成分比重閾值t。這個閾值t在(0,1]之間。假如咱們的n個特徵值爲$\lambda_1 \geq \lambda_2 \geq ... \geq \lambda_n$,則n'能夠經過下式獲得:$$\frac{\sum\limits_{i=1}^{n'}\lambda_i}{\sum\limits_{i=1}^{n}\lambda_i} \geq t $$
下面舉一個簡單的例子,說明PCA的過程。
假設咱們的數據集有10個二維數據(2.5,2.4), (0.5,0.7), (2.2,2.9), (1.9,2.2), (3.1,3.0), (2.3, 2.7), (2, 1.6), (1, 1.1), (1.5, 1.6), (1.1, 0.9),須要用PCA降到1維特徵。
首先咱們對樣本中心化,這裏樣本的均值爲(1.81, 1.91),全部的樣本減去這個均值向量後,即中心化後的數據集爲(0.69, 0.49), (-1.31, -1.21), (0.39, 0.99), (0.09, 0.29), (1.29, 1.09), (0.49, 0.79), (0.19, -0.31), (-0.81, -0.81), (-0.31, -0.31), (-0.71, -1.01)。
如今咱們開始求樣本的協方差矩陣,因爲咱們是二維的,則協方差矩陣爲:
$$\mathbf{XX^T} =
\left( \begin{array}{ccc}
cov(x_1,x_1) & cov(x_1,x_2)\\
cov(x_2,x_1) & cov(x_2,x_2) \end{array} \right)$$
對於咱們的數據,求出協方差矩陣爲:
$$\mathbf{XX^T} =
\left( \begin{array}{ccc}
0.616555556 & 0.615444444\\
0.615444444 & 0.716555556 \end{array} \right)$$
求出特徵值爲(0.0490833989, 1.28402771),對應的特徵向量分別爲:$(0.735178656, 0.677873399)^T\;\; (-0.677873399, -0.735178656)^T$,因爲最大的k=1個特徵值爲1.28402771,對於的k=1個特徵向量爲$(-0.677873399, -0.735178656)^T$. 則咱們的W=$(-0.677873399, -0.735178656)^T$
咱們對全部的數據集進行投影$z^{(i)}=W^Tx^{(i)}$,獲得PCA降維後的10個一維數據集爲:(-0.827970186, 1.77758033, -0.992197494, -0.274210416, -1.67580142, -0.912949103, 0.0991094375, 1.14457216, 0.438046137, 1.22382056)
在上面的PCA算法中,咱們假設存在一個線性的超平面,可讓咱們對數據進行投影。可是有些時候,數據不是線性的,不能直接進行PCA降維。這裏就須要用到和支持向量機同樣的核函數的思想,先把數據集從n維映射到線性可分的高維N>n,而後再從N維降維到一個低維度n', 這裏的維度之間知足n'<n<N。
使用了核函數的主成分分析通常稱之爲核主成分分析(Kernelized PCA, 如下簡稱KPCA。假設高維空間的數據是由n維空間的數據經過映射$\phi$產生。
則對於n維空間的特徵分解:$$ \sum\limits_{i=1}^{m}x^{(i)}x^{(i)T}W=\lambda W$$
映射爲:$$ \sum\limits_{i=1}^{m}\phi(x^{(i)})\phi(x^{(i)})^TW=\lambda W$$
經過在高維空間進行協方差矩陣的特徵值分解,而後用和PCA同樣的方法進行降維。通常來講,映射$\phi$不用顯式的計算,而是在須要計算的時候經過核函數完成。因爲KPCA須要核函數的運算,所以它的計算量要比PCA大不少。
這裏對PCA算法作一個總結。做爲一個非監督學習的降維方法,它只須要特徵值分解,就能夠對數據進行壓縮,去噪。所以在實際場景應用很普遍。爲了克服PCA的一些缺點,出現了不少PCA的變種,好比第六節的爲解決非線性降維的KPCA,還有解決內存限制的增量PCA方法Incremental PCA,以及解決稀疏數據降維的PCA方法Sparse PCA等。
PCA算法的主要優勢有:
1)僅僅須要以方差衡量信息量,不受數據集之外的因素影響。
2)各主成分之間正交,可消除原始數據成分間的相互影響的因素。
3)計算方法簡單,主要運算是特徵值分解,易於實現。
PCA算法的主要缺點有:
1)主成分各個特徵維度的含義具備必定的模糊性,不如原始樣本特徵的解釋性強。
2)方差小的非主成分也可能含有對樣本差別的重要信息,因降維丟棄可能對後續數據處理有影響。
祝你們新年快樂!
(歡迎轉載,轉載請註明出處。歡迎溝通交流: liujianping-ok@163.com)