機器學習降維之主成分分析

Fate0729發表於2019-07-18

1. 主成分基本思想

主成分基本思想:在主成分分析中,首先對給定資料進行規範化,使得資料每一個變數的平均值維0,方差為1,之後對資料進行正交變換,原來由線性相關變數表示的資料,通過正交變換變成由若干個線性無關的新變數表示的資料。新變數是可能的正交變換中變數的方差的和最大的,方差表示了新變數上資訊的大小,將新變數依次稱為第一主成分,第二主成分等

通過主成分分析,可以利用主成分近似地表示原始資料,這可理解為發現資料的'基本結構',也可以把資料由少數主成分表示,這可理解為資料降維

2. 總體主成分定義

\(假設X = {(x_1,x_2,x_3,...,x_m)}^T是m維隨機變數,其均值向量為\mu\),\[\mu = E(X) = {(\mu_1,\mu_2,...,\mu_m)}^T\]

\(協方差矩陣是\xi\),\[\xi = cov(x_i,x_j) = E[(x_i-\mu){(x_j-\mu)}^T]\]

\(考慮由m維隨機變數x到m維隨機變數y = {(y_1,y_2,...,y_m)}^T的線性變換\)
\[y_i = a_i^TX = a_{1i}x_1+a_{2i}x_2+...+a_{mi}x_m\]

其中\(a_i^T = (a_{1i},a_{2i},...,a_{mi})\)

由隨機變數的性質可以知道:
\[E(y_i) = a_{i}^T\mu\]
\[var(y_i) = a_i^T\xi a_i\]
\[cov(y_i,y_j) = a_i^T\xi a_j\]

下面給出總體主成分的定義

定義(總體主成分):給定一個上面\(y_i = a_i^TX = a_{1i}x_1+a_{2i}x_2+...+a_{mi}x_m\)的線性變換,如果滿足下列條件:

  • (1)係數向量\(a_i^T是單位向量,即a_i^T a_i = 1\)
  • (2)\(變數y_i與y_j互不相關,即它們的協方差為0\)
  • (3)\(變數y_1是X的所有線性變換中方差最大的;y_2是與y_1不相關的X的所有線性變換中方差最大的;\) \(一般地y_i是與y_1,y_2,...,y_{i-1}都不相關的X的所有線性變換中方差最大的;\) \(這時分別稱y_1,y_2,...,y_m為X的第一主成分、第二主成分、...、第m主成分\)

3. 樣本均值和方差

假設對m維隨機變數\(X={(x_1,x_2,...,x_m)}^T\)進行n次獨立觀測,\(x_1,x_2,...,x_n\)表示觀測樣本,其中\(x_j={(x_{1j},x_{2j},...,x_{mj})}^T\)表示第j個觀測樣本,\(x_{ij}表示第j個觀測樣本的第i個變數\)

給定樣本矩陣X,可以估計樣本均值,以及樣本協方差,樣本均值向量\[\tilde x = \frac{1}{n}\sum_{j=1}^nx_j\]

樣本方差\[S = \frac{1}{n-1}\sum_{j=1}^n(x_{ik} - \tilde x_i)(x_{jk}-\tilde j)\]

3.1 樣本方差推導

樣本方差公式\[S = \frac{1}{n-1}\sum_{i=1}^n(x_i-\mu_i)^2\]
擴充套件開來得到\[S = \frac{1}{n-1}[(X-\frac{1}{n}X^TI_nI_n^T)^T(X-\frac{1}{n}X^TI_nI_n^T)]\]
\[S = \frac{1}{n-1}X^T(I_n - \frac{1}{n}I_nI_n^T)(I_n - \frac{1}{n}I_nI_n^T)X\]
\(H = I_n - \frac{1}{n}I_nI_n^T\)\[S = \frac{1}{n-1}X^THX\]
其中H為等冪矩陣HH=H和中心矩陣\(H_n*I_n = 0\)

4. PCA求解流程

  • (1)資料歸一化,均值為0,方差為1
  • (2)計算協方差矩陣
  • (3)計算協方差矩陣的特徵值和特徵向量
  • (4)將特徵值從大到小排序
  • (5)保留最上面的N個特徵向量
  • (6)將資料轉換到上述N個特徵向量構建的新空間中

4.1 python實現PCA

def pca(dataMat, topNfeat=9999999):
    meanVals = mean(dataMat, axis=0)
    meanRemoved = dataMat - meanVals #remove mean
    covMat = cov(meanRemoved, rowvar=0)
    eigVals,eigVects = linalg.eig(mat(covMat))
    eigValInd = argsort(eigVals)            #sort, sort goes smallest to largest
    eigValInd = eigValInd[:-(topNfeat+1):-1]  #cut off unwanted dimensions
    redEigVects = eigVects[:,eigValInd]       #reorganize eig vects largest to smallest
    lowDDataMat = meanRemoved * redEigVects#transform data into new dimensions
    reconMat = (lowDDataMat * redEigVects.T) + meanVals
    return lowDDataMat, reconMat

5. PCA最小平方誤差理論推導

PCA求解其實是尋找最佳投影方向,即多個方向的標準正交基構成一個超平面。

理論思想:在高維空間中,我們實際上是要找到一個d維超平面,使得資料點到這個超平面的距離平方和最小

假設\(x_k\)表示p維空間的k個點,\(z_k\)表示\(x_k\)在超平面D上的投影向量,\(W = {w_1,w_2,...,w_d}\)為D維空間的標準正交基,即PCA最小平方誤差理論轉換為如下優化問題\[z_k = \sum_{i=1}^d (w_i^T x_k)w_i---(1)\]
\[argmin \sum_{i=1}^k||x_k - z_k||_2^2\]
\[s.t. w_i^Tw_j = p(當i==j時p=1,否則p=0)\]

注:\(w_i^Tx_k\)為x_k在w_i基向量的投影長度,\(w_i^Tx_kw_i\)為w_i基向量的座標值

求解:

\(L = (x_k - z_k)^T(x_k-z_k)\)

\(L= x_k^Tx_k - x_k^Tz_k - z_k^Tx_k + z_k^Tz_k\)

由於向量內積性質\(x_k^Tz_k = z_k^Tx_k\)

\(L = x_k^Tx_k - 2x_k^Tz_k + z_k^Tz_k\)

將(1)帶入得\[x_k^Tz_k = \sum_{i=1}^dw_i^Tx_kx_k^Tw_i\]

\[z_k^Tz_k = \sum_{i=1}^d\sum_{j=1}^d(w_i^Tx_kw_i)^T(w_j^Tx_kw_j)\]

根據約束條件s.t.得\[z_k^Tz_k = \sum_{i=1}^dw_i^Tx_k^Tx_kw_i\]

\[L =x_k^Tx_k - \sum_{i=1}^dw_i^Tx_kx_k^Tw_i\]

根據奇異值分解\[\sum_{i=1}^dw_i^Tx_kx_k^Tw_i = tr(W^Tx_k^Tx_kW)\]

\[L =argmin\sum_{i=1}^kx_k^Tx_k - tr(W^Tx_k^Tx_kW) = argmin\sum_{i=1}^k- tr(W^Tx_k^Tx_kW) + C\]

等價於帶約束得優化問題:\[argmaxtr(W^TXX^TW)\]
\[s.t. W^TW = I\]

最佳超平面W與最大方差法求解的最佳投影方向一致,即協方差矩陣的最大特徵值所對應的特徵向量,差別僅是協方差矩陣\(\xi\)的一個倍數

5.1 定理

\[argmin\phi(W,Z|X) = tr((X-W^TZ)^T(X-W^TZ)) = ||X-W^TZ||_F^2\]
\[s.t.W^TW=I_q\]

注:X為(n,p),Z為(n,q),q < p,w為(p,q)

該定理表達的意思也就是平方差理論,將降維後的矩陣通過W^T投影回去,再與X計算最小平方差,值越小說明資訊損失越少

\(\phi\)目標函式最小時,W為X的前q個特徵向量矩陣且\(Z=W^TX\)

以上優化可以通過拉格朗日對偶問題求得,最終也會得到\[argmaxtr(W^TXX^TW)\]
\[s.t. W^TW = I\]

6. 核PCA推導

核函式:設X是輸入空間(\(R^n\)的子集或離散子集),又F為特徵空間(希爾伯特空間),如果存在一個從X到F的隱射\[\phi (X):X -> F\]使得對所有x,z\in X,函式K(x,z)滿足條件\[K(x,z) = \phi (x)\bullet \phi (z)\]

下面推導F投影到的主成分定義的平面,根據F樣本方差的特徵值分解得(為推導方便去掉前面的(\(\frac{1}{n-1}\))\[F^THFV_i = \lambda _i V_i\]由於H為等逆矩陣,則\[F^THHFV_i = \lambda _i V_i\]

由於想得到F很難,我們換一種思路將求F轉移求K上,根據AA^T與A^他的關係:非零特質值相同,得到\[HFF^THU_i = \lambda _iU_i \]

兩邊同時乘以\(F^TH\)得到\[F^THHFF^THU_i = \lambda _iF^THU_i\]

從上式可以得到\(F^THU_i\)\(F^THHF\)的特徵向量

\(F^THU_i\)進行歸一化\[U_{normal} = \frac{F^THU_i}{{||U_i^THFF^THU_i||}_2}\]

由於\(HFF^TH = HKH = \lambda _i\),則\[U_{normal} = \lambda ^{-\frac{1}{2}}F^THU_i\]

F投影到\(U_normal\)定義的平面\[P = F_{center} U_{normal}\]

\[P= (F-\frac{1}{n}\sum_{i=1}^nF_i)(\lambda ^{-\frac{1}{2}}F^THU_i)\]

\[P= (F-\frac{1}{n}F^TI_n)(\lambda ^{-\frac{1}{2}}F^THU_i)\]

\[P= \lambda ^{-\frac{1}{2}}(K - \frac{1}{n}K(x,x_i))HU_i\]

附:奇異值分解

奇異值分解是一個能適用於任意矩陣的一種分解方法:\[A = U\xi{V}^T\]

假設A是一個MN的矩陣,那麼U就是MM的方陣(裡面的向量是正交的,U裡面向量為左奇異向量),\(\xi\)為MN的實數對角矩陣(對角線以外的元素都是0,對角線上的元素為奇異值),
\(V^T\)是一個N
N的矩陣(裡面的向量是正交的,V裡面的向量稱為右奇異向量)

再結合特徵值分解:\[(A^T\bullet{A})\bullet{V_i} = \lambda{_i}\bullet{V_i}\]

上面得到的\(V_i\)就是奇異值分解種的右奇異向量,\(\lambda{_i}\)為特徵值

此外我們還可以得到:\[\sigma{_i} = \sqrt{\lambda{_i}}\\u_i=\frac{1}{\sigma{_i}}AV_i\]

上面的\(\sigma{_i}為奇異值\)\(u_i\)為左奇異向量

常見的做法是將奇異值由大到小排列,在大多數情況下,前10%甚至1%的奇異值的和就佔了全部奇異值和的99%以上,也就是說我們可以用前r大的奇異值來近似描述矩陣
\[A_{m\times{n}}\approx{U_{m\times{r}}\xi{_{r\times{r}}}V_{r\times{n}}^T}\]

r是一個遠小於m,n的數

參考資料:

  • (1)李航老師的
  • (2)
  • (3)

相關文章