05-03 主成分分析(PCA)

更新、更全的《機器學習》的更新網站,更有python、go、數據結構與算法、爬蟲、人工智能教學等着你:http://www.javashuo.com/article/p-vozphyqp-cm.htmlpython

主成分分析(PCA)

1、維數災難和降維

在KNN算法中曾講到,對於高維數據,會出現數據樣本稀疏、距離計算困難等問題。可是這種問題並非僅僅針對KNN算法,只是在KNN算法中這種問題會被放大,而其餘的機器學習算法也會由於高維數據對訓練模型形成極大的障礙,這種問題通常被稱爲維數災難(curse of dimensionality)。算法

解決維數災難最經常使用的方法是降維(dimension reduction),即經過某種數學變換將原始高維特徵空間轉變爲一個低維子空間,在這個子空間中樣本密度大幅提升,距離計算也變得更容易。數據結構

# 維數災難和降維圖例
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
from sklearn.decomposition import PCA
%matplotlib inline
font = FontProperties(fname='/Library/Fonts/Heiti.ttc')

np.random.seed(0)
X = np.empty((100, 2))
X[:, 0] = np.random.uniform(0, 100, size=100)
X[:, 1] = 0.75 * X[:, 0] + 3. + np.random.normal(0, 10, size=100)
pca = PCA(n_components=1)
X_reduction = pca.fit_transform(X)
X_restore = pca.inverse_transform(X_reduction)

plt.scatter(X[:, 0], X[:, 1], color='g', label='原始數據')
plt.scatter(X_restore[:, 0], X_restore[:, 1],
            color='r', label='降維後的數據')
plt.annotate(s='',xytext=(40,60),xy=(65,30),arrowprops=dict(arrowstyle='-',color='b',linewidth=5))
plt.legend(prop=font)
plt.show()

png

如上圖所示,綠點即原始高維空間中的樣本點,紅點即咱們降維後的樣本點。因爲圖中的高維是二維,低維是一維,因此樣本在低維空間是一條直線。dom

接下來咱們的目標就是聊一聊如何作到把高維空間樣本點映射到低維空間,即各類降維算法。機器學習

2、主成分分析學習目標

  1. 維數災難和降維
  2. 主成分分析兩個條件
  3. 基於主成分分析兩個條件推導主成分分析
  4. 核主成分分析
  5. 主成分分析優缺點

3、主成分分析詳解

主成分分析(principal component analysis,PCA)是最經常使用的一種降維方法,咱們已經利用「維數災難和降維圖例」解釋了降維的過程,PCA的降維過程則是儘量的使用數據最主要的特徵來表明數據原有的全部特徵。可是有沒有同窗想過爲何使用PCA降維是上圖的紅點組成的線而不是藍線呢?這裏就須要說到咱們PCA的兩個條件了。函數

3.1 主成分分析兩個條件

對於「維數災難和降維圖例」中的紅線和藍線咱們能夠把它當作一個超平面\(S\),理論上紅線和藍線構成的超平面均可以作到對樣本特徵的降維,可是通常咱們但願這種可以作到降維的超平面知足如下兩個條件學習

  1. 最近重構性:樣本點到這個超平面的距離都足夠近
  2. 最大可分性:樣本點到這個超平面上的投影儘量分開

基於最近重構性和最大可分性,就能夠獲得主成分分析的兩種等價推導。優化

3.2 基於最近重構性推導PCA

3.2.1 主成分分析目標函數

咱們首先從最近重構性推導PCA,即樣本點到這個超平面的距離足夠近。網站

假設\(m\)\(n\)維數據\((x^{(1)},x^{(2)},\cdots,x^{(m)})\)都已經進行了中心化,即\(\sum_{i=1}^mx^{(i)}=0\);在假設投影變換後獲得的新座標系爲\(\{w_1,w_2,\cdots,w_n\}\),其中\(w_i\)是標準正交基向量,即\(||w_i||=1,w_i^Tw_j=0\),其中\(i\neq{j}\)

若是把數據從\(n\)維降到\(n'\)維,即丟棄新座標系中的部分座標,則新的座標系爲\(\{w_1,w_2,\cdots,w_{n'}\}\),則樣本點\(x^{(i)}\)\(n'\)維座標系中的投影爲
\[ z_{i} = (z_{i1},z_{i2},\cdots,z_{id'})^T \]
其中\(z_{ij}=w_j^Tx_i\),是\(x_i\)在低維座標系下第\(j\)維的座標。

若是咱們用\(z^{(i)}\)重構\(x^{(i)}\),則能夠恢復的原始數據爲
\[ \hat{x_i}=\sum_{j=1}^{d'}z_{ij}w_j \]
如今考慮整個樣本集,既能夠得到原樣本點\(x_i\)到基於投影重構的樣本點\(\hat{x_i}\)之間的距離爲
\[ \begin{align} \sum_{i=1}^m{||\hat{x_i}-x_i||}^2 & = \sum_{i=1}^m{||Wz_i-x_i||}^2 \\ & = \sum_{i=1}^m(Wz_i)^T(Wz_i)-2\sum_{i=1}^m(Wz_i)^Tx_i+\sum_{i=1}^mx_i^Tx_i \\ & = \sum_{i=1}^mz_i^Tz_i - 2\sum_{i=1}^mz_i^TW^Tx_i+\sum_{i=1}^mx_i^Tx_i \\ & = \sum_{i=1}^mz_i^Tz_i-2\sum_{i=1}^mz_i^Tz_i+\sum_{i=1}^mx_i^Tx_i \\ & = -\sum_{i=1}^mz_i^Tz_i + \sum_{i=1}^mx_i^Tx_i \\ & = -tr(W^T(\sum_{i=1}^mx_ix_i^T)W)+\sum_{i=1}^mx_i^Tx_i \\ & = -tr(W^TXX^TW)+\sum_{i=1}^mx_i^Tx_i \end{align} \]
因爲涉及過多矩陣推導,此處很少贅述,看不懂的能夠跳過。

其中\(W=(w_1,w_2,\cdots,w_d)\),其中\(\sum_{i=1}^mx_i^Tx_i\)是數據集的協方差矩陣,\(W\)的每個向量\(w_j\)是標準正交基,而\(\sum_{i=1}^mx_i^Tx_i\)是一個常量,最小化上式等價於
\[ \begin{align} & \underbrace{min}_W\,-tr(W^TXX^TW) \\ & s.t.\,W^TW=I \end{align} \]

3.2.2 主成分分析目標函數優化

主成分分析目標函數爲
\[ \begin{align} & \underbrace{min}_W\,-tr(W^TXX^TW) \\ & s.t.\,W^TW=I \end{align} \]
最小化該目標函數其實並不難,能夠發現最小化目標函數對應的\(W\)由協方差矩陣\(XX^T\)最大的\(n'\)個特徵值對應的特徵向量組成,利用拉格朗日乘子法可得
\[ J(W)=-tr(W^TXX^TW+\lambda_i(W^TW-I)) \]
\(W\)求導等於0便可得
\[ \begin{align} & -XX^TW+\lambda{W}=0 \\ & XX^TW = \lambda{W} \end{align} \]
從上式能夠看出,\(W\)\(XX^T\)\(n'\)個特徵向量組成的矩陣,而\(\lambda\)有若干個特徵值組成的矩陣,特徵值在對角線上,其他位置爲0。當咱們將數據集從\(n\)維降到\(n'\)維時,須要找到最大的\(n'\)個特徵值對應的特徵向量。這個\(n'\)個特徵向量組成的矩陣\(W\)即咱們須要的矩陣。對於原始數據集,咱們只須要用\(z_i=W^Tx_i\),就能夠把原始數據集降到最小投影距離的\(n'\)維數據集。

3.3 基於最大可分性推導PCA

從最大可分性出發,樣本點\(x_i\)在新空間中超平面的投影是\(W^Tx_i\),若是全部樣本點的投影儘量分開,則應該使投影后樣本點的方差最大化。

投影后樣本點的方差是\(\sum_{i=1}^mW^Tx_ix_i^TW\),所以目標函數能夠寫成
\[ \begin{align} & \underbrace{max}_W\,-tr(W^TXX^TW) \\ & s.t.\,W^TW=I \end{align} \]
上式其實和基於最近重構性推導PCA的目標函數其實差很少,其中一個是加負號的最小化,一個是最大化。
對基於最大可分性推導獲得的目標函數最大化,利用拉格朗日乘子法能夠獲得
\[ XX^TW = -\lambda{W} \]

3.4 核主成分分析(KPCA)

PCA中,咱們假設存在一個線性的超平面,能夠對數據投影,但工業上大多數時候數據都是線性不可分的,這裏就須要用到和核SVM同樣的思想,即核主成分分析(kernelized PCA,KPCA),是基於核技巧對非線性可分數據進行降維。

KPCA首先會把數據從\(n\)維映射到更高的\(N\)維,讓數據線性可分後又會把數據映射回低維\(n'\),即\(n'<n<N\)

假設咱們將在高維特徵空間把數據投影到由\(W=(w_1,w_2,\cdots,w_d)\)肯定的超平面上,則\(W\)
\[ ZZ^TW = (\sum_{i=1}^mz_iz_i^T)W=\lambda{W} \]
其中\(z_i\)是樣本點再高維特徵空間中的像,即特徵分解問題變爲
\[ \begin{align} W & = {\frac{1}{\lambda}}(\sum_{i=1}^mz_iz_i^T)W \\ & = \sum_{i=1}^mz_i{\frac{z_i^TW}{\lambda}} \\ & = \sum_{i=1}^mz_i\alpha_i^j \end{align} \]
其中\(a_i^j={\frac{1}{\lambda}}z_i^TW\)\(\alpha_i\)的第\(j\)個份量。

假設\(z_i\)是由原始樣本點\(x_i\)經過映射\(\phi\)產生,即\(z_i=\phi(x_i)\),則特徵分解問題變爲
\[ (\sum_{i=1}^m\phi(x_i)\phi(x_i)^T)W = \lambda{W} \]
\(W\)變爲
\[ W=\sum_{i=1}^m\phi(x_i)\alpha_i^j \]
因爲咱們並不知道\(\phi\)是什麼,通常狀況下\(\phi\)不須要顯示計算,經過核函數轉換便可。所以引入核函數
\[ k(x_i,x_j)=\phi(x_i)^T\phi(x_j) \]
將核函數和\(w_j\)代入特徵分解問題,可得
\[ K\alpha^j=\lambda\alpha^j \]
其中\(K\)\(k\)對應的核矩陣,對於上述特徵值分解問題,去\(K\)最大的\(d'\)個特徵值對應的特徵向量便可。

對於新樣本\(x\),他投影后的第\(j\quad(j=1,2,\cdots,d')\)維座標爲
\[ \begin{align} z_j & = W^T\phi(x) \\ & = \sum_{i=1}^m\alpha_i^j\phi(x_i)^T\phi(x) \\ & = \sum_{i=1}^m\alpha_i^jk(x_i,x) \end{align} \]
從上述特徵分解能夠看出,KPCA須要對全部樣本求和,所以它的計算開銷較大。

4、主成分分析流程

4.1 輸入

樣本集\(D=\{x_1,x_2,\cdots,x_n\}\);低維空間維數\(n'\)

4.2 輸出

降維後的樣本集\(D'\)

4.3 流程

  1. 對全部樣本進行中心化:\(x_i\leftarrow{x_i}-{\frac{1}{m}}\sum_{i=1}^m{x_i}\)
  2. 計算樣本的協方差矩陣\(XX^T\)
  3. 對協方差矩陣\(XX^T\)作特徵值分解
  4. 取最大的\(n'\)個特徵值所對應的特徵向量\((w_1,w_2,\cdots,w_{n'})\),將全部的特徵向量標準化後,組成特徵向量矩陣\(W\)
  5. 對樣本集中的每個樣本\(x^{(i)}\),轉化爲新的樣本\(z^{(i)}=W^Tx^{(i)}\)
  6. 獲得輸出樣本集\(n'=(z^{(1)},z^{(2)},\cdots,z^{(m)})\)

降維後低維空間的維數\(n'\)一般是用戶事先指定的,通常選擇使用交叉驗證的方法選擇最好的\(n'\)值。對於PCA,有時候也會從重構的角度指定一個降維到的主成分比重閾值\(t\),這個閾值的範圍通常是\((0,1]\),而後選取使下式成立的最小\(n'\)
\[ {\frac{\sum_{i=1}^{n'}\lambda_i}{\sum_{i=1}^{n}\lambda_i}}\geq{t} \]

5、主成分分析優缺點

5.1 優勢

  1. 只須要以方差衡量信息量,不受數據集之外的因素影響
  2. 主要計算是特徵值分解,計算簡單,易於實現

5.2 缺點

  1. 主成分因爲是降維獲得,沒有原始樣本那樣較強的解釋性
  2. 因爲PCA降維會丟掉很多的信息,可能對後續的數據處理有影響

6、小結

PCA做爲一個無監督學習的降維方法,只須要對特徵值分解,就能夠壓縮數據,對數據去噪聲。可是PCA仍是有很多缺點的,針對PCA的缺點,也出現了不少PCA的變種,如解決非線性數據降維的KPCA;解決內存限制的增量的Incremental PCA;解決稀疏數據降維的Sparse PCA等。

因爲PCA涉及過多的數學公式,以及有着較強邏輯和空間處理。若是不是很懂能夠結合代碼而後多看幾遍。

相關文章
相關標籤/搜索