主成分分析(PCA)原理總結

主成分分析(Principal components analysis,如下簡稱PCA)是最重要的降維方法之一。在數據壓縮消除冗餘和數據噪音消除等領域都有普遍的應用。通常咱們提到降維最容易想到的算法就是PCA,下面咱們就對PCA的原理作一個總結。算法

1、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維推廣到任意維,則咱們的但願降維的標準爲:樣本點到這個超平面的距離足夠近,或者說樣本點在這個超平面上的投影能儘量的分開。優化

    基於上面的兩種標準,咱們能夠獲得PCA的兩種等價推導。spa

2、PCA的推導:基於最小投影距離

    咱們首先看第一種解釋的推導,即樣本點到這個超平面的距離足夠近。component

    假設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\)blog

    若是咱們將數據從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維的座標。ip

    若是咱們用\(z^{(i)}\)來恢復原始數據\(x^{(i)}\),則獲得的恢復數據\(\overline{x}^{(i)} = \sum\limits_{j=1}^{n'}z_j^{(i)}w_j = Wz^{(i)}\),其中,W爲標準正交基組成的矩陣。內存

    如今咱們考慮整個樣本集,咱們但願全部的樣本到這個超平面的距離足夠近,即最小化下式:
\[ \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個最大的特徵值對應的特徵向量。  

3、PCA的推導:基於最大投影方差

    如今咱們再來看看基於最大投影方差的推導。

假設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)}\),在新座標系中的投影方差爲\(W^Tx^{(i)}x^{(i)T}W\),要使全部的樣本的投影方差和最大,也就是最大化$ \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'維數據集。

4、PCA算法流程

    從上面兩節咱們能夠看出,求樣本\(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 \]

5、PCA實例

    下面舉一個簡單的例子,說明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)

6、核主成分分析KPCA介紹

    在上面的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大不少。

7、PCA算法總結

    這裏對PCA算法作一個總結。做爲一個非監督學習的降維方法,它只須要特徵值分解,就能夠對數據進行壓縮,去噪。所以在實際場景應用很普遍。爲了克服PCA的一些缺點,出現了不少PCA的變種,好比第六節的爲解決非線性降維的KPCA,還有解決內存限制的增量PCA方法Incremental PCA,以及解決稀疏數據降維的PCA方法Sparse PCA等。

    PCA算法的主要優勢有:

    1)僅僅須要以方差衡量信息量,不受數據集之外的因素影響。 

    2)各主成分之間正交,可消除原始數據成分間的相互影響的因素。

    3)計算方法簡單,主要運算是特徵值分解,易於實現。

    PCA算法的主要缺點有:

    1)主成分各個特徵維度的含義具備必定的模糊性,不如原始樣本特徵的解釋性強。

    2)方差小的非主成分也可能含有對樣本差別的重要信息,因降維丟棄可能對後續數據處理有影響。

 

祝你們新年快樂!

(歡迎轉載,轉載請註明出處。歡迎溝通交流: 微信:nickchen121)

相關文章
相關標籤/搜索