理解主成分分析

譯者注:

  • 本文翻譯自 Rishav Kumar 於 2019 年 1 月 2 日發表的文章 Understanding Principal Component Analysis
  • 文中括號或者引用塊中的 斜體字 爲對應的英文原文或者我自己註釋的話(會標明「譯者注」),否則爲原文中本來就有的話
  • 文中的「我」均指原作者 Rishav Kumar
  • 目錄保留英文原文
  • 本人水平有限,如有錯誤歡迎指出
  • 能力尚可建議閱讀英文原文
  • 文章同步發表至 我的個人獨立博客

本文的目的是讓讀者能夠通過必要的數學證明來詳細瞭解主成分分析。

在現實世界的數據分析任務中,我們面對的數據通常較爲複雜,例如多維數據。我們繪製數據並希望從中找到各種模式,或者使用數據來訓練機器學習模型。一種看待維度(dimensions)的方法是假設你有一個數據點 xx,如果我們把這個數據點想象成一個物理對象,那麼維度就是僅僅是一個視圖(譯者注:這裏的視圖應該是和三視圖中的視圖是一個概念)的基礎(basis of view),就像從橫軸或者縱軸觀察數據時的位置。

隨着數據維度的增長,可視化數據的難度和數據計算量也隨之增長。所以,如何減少數據維度?

  • 較少冗餘的維度
  • 僅僅保留最重要的維度

break1

首先來理解一些術語:

方差(Variance:它是數據離散程度的一個度量方法。數學上來說,就是數據與其平均值的誤差平方和的平均。我們使用如下的公式來計算方差 var(x)var(x)

var(x)=Σ(xixˉ)2Nvar(x) = \frac{\Sigma(x_i-\bar{x})^2}{N}

協方差(Covariance):它衡量兩組有序數據中相應元素在同一方向上移動的程度(譯者注:或者通俗的來講,就是表示兩個變量的變化趨勢)。兩個變量 xxyy 的協方差 cov(x,y)cov(x,y) 可以如下計算:

cov(x,y)=Σ(xixˉ)(yiyˉ)Ncov(x,y) = \frac{\Sigma(x_i-\bar{x})(y_i-\bar{y})}{N}

其中,xix_ixx 在第 ii 個維度的值(譯者注:注意和 Python 中的多維列表中的「維」做區分,數學上來說,這裏的 xx 只是一個向量),xˉ\bar{x}yˉ\bar{y} 是相應的平均值。

協方差的一種理解方式是兩個數據集是如何相關關聯的。

正協方差意味着 XXYY 是正相關的,即 XX 增長 YY 也增長。負協方差則意味着完全相反的關係。然而協方差爲零意味着 XXYY 不相關。

Continue break1

現在讓我們來考慮一下數據分析的需求。

由於我們想要找到數據中的模式,所以我們希望數據分佈在每個維度上。同時,我們也希望各個維度之間是獨立的。這樣的話如果數據在某些 nn 維表示中具有高協方差時,我們可以用這些 nn 維的線性組合來替代原來的維度。現在數據就變成僅僅依賴於這 nn 維的線性組合了。

那麼,主成分分析(PCA)是幹什麼的?

PCA 試圖尋找一組新的維度(或者叫一組基礎視圖),使得所有維度都是正交的(所以線性無關),並根據數據在他們上面的方差進行排序。這就意味着越重要的成分越會排在前面(越重要 = 更大方差/數據分佈更廣)

PCA 的步驟如下:

  1. 計算數據點的協方差矩陣 XX
  2. 計算特徵向量和相應的特徵值
  3. 根據特徵值,降序排列對應的特徵向量
  4. 選擇前 kk 個特徵向量作爲新的 kk
  5. 將原始的 nn 維數據變換爲 kk

爲了理解 PCA 的詳細計算過程,你需要對特徵向量(eigen vectors)和特徵值(eigen values)有所瞭解,你可以參考這個對特徵值和特徵向量的直觀解釋

確保在繼續閱讀之前你已經理解了特徵向量和特徵值。

[Covariancematrix][Eigenvector]=[eigenvalue][Eigenvector][Covariance matrix] \cdot [Eigenvector] = [eigenvalue] \cdot [Eigenvector]

假設我們已經瞭解了方差和協方差,然後我們來看下協方差矩陣是什麼樣的:

[VaCa,bCa,cCa,dCa,eCa,bVbCb,cCb,dCb,eCa,cCb,cVcCc,dCc,eCa,dCb,dCc,dVdCd,eCa,eCb,eCc,eCd,eVe]\begin{bmatrix} V_a & C_{a,b} & C_{a,c} & C_{a,d} & C_{a,e} \\ C_{a,b} & V_b & C_{b,c} & C_{b,d} & C_{b,e} \\ C_{a,c} & C_{b,c} & V_c & C_{c,d} & C_{c,e} \\ C_{a,d} & C_{b,d} & C_{c,d} & V_d & C_{d,e} \\ C_{a,e} & C_{b,e} & C_{c,e} & C_{d,e} & V_e \\ \end{bmatrix}

上面的矩陣即是一個 5 維數據集的協方差矩陣(譯者注:原文說是 4 維,我覺得有可能筆誤,我這裏更正爲 5 維),a、b、c、d 和 e。其中 VaV_a 表示在 a 維度上的方差,Ca,bC_{a,b} 表示 a 與 b 之間的協方差。

如果我們有一個 m×nm \times n 的矩陣,也就是說有 nn 個數據點,每個數據點 mm 維(譯者注:這是原文的說法,暫且將數據點理解爲樣本,我個人覺得,一般是以行表示樣本,列表示特徵,而這裏的說法正好相反),然後協方差矩陣可以如下計算:

Cx=1n1(XXˉ)(XXˉ)TC_x = \frac{1}{n-1}(X-\bar{X})(X-\bar{X})^T

其中 XTX^TXX 的轉置。

需要注意的是,協方差矩陣包括:

  • 每個維度上的方差作爲主對角線元素
  • 每兩個維度之間的協方差作爲非對角線元素

而且,協方差矩陣是對稱的。正如我們之前說的那樣,我們希望數據分佈的更廣,即它應該在某個維度上具有高方差。我們也想要去除相關性高的維度,即維度之間的協方差應該爲 0(他們應該是線性無關的)。因此,我們的協方差矩陣應該具有:

  • 主對角線元素的值比較大
  • 非對角線元素爲 0

我們稱之爲對角陣(diagonal matrix)。

所以我們必須變換原始數據點,才能使得他們的協方差矩陣爲對角陣。把一個矩陣變換爲對角陣的過程稱爲對角化diagonalization)。

在進行 PCA 之前記得歸一化(normalize)你的數據,因爲如果我們使用不同尺度的數據(即這裏的特徵),我們會得到誤導性的成分。如果特徵尺度不同,那麼我們也可以簡單地使用相關性矩陣而不是協方差矩陣。爲了簡化這篇文章,我假設我們已經歸一化了數據。

讓我們來定義一下 PCA 的目標:

  • 找到可以無損地表示原始數據的線性無關的維度(或者基礎視圖)
  • 這些新找到的維度應該能夠讓我們預測或者重建原始維度,同時應該最小化重建或者投影誤差

讓我們來理解一下我所說的投影誤差。假設我們要把一個 2 維數據變換成 1 維。所以我們就需要找到一條直線然後把數據點投影到上面(一條直線就是 1 維的)。我們可以找到很多條直線,讓我們來看下其中兩種:


假設洋紅色(magenta)線就是我們的新維度。

如果你看到了紅色線(連接藍色點的投影和洋紅色線),那麼這每個數據點到直線的垂直距離就是投影誤差。所有數據點的誤差的和就是總投影誤差(譯者注:這裏每個數據點的誤差可以是絕對值形式或者平方誤差形式)。

我們的新數據點就是原始藍色數據點的投影(紅點)。正如我們所看到的,我們將 2 維數據投影到 1 維空間,從而將他們變換成 1 維數據。那條洋紅色的線被稱爲主軸principal axis)。由於我們是投影到一個維度,所有我們只有一個主軸。

很明顯,我們選擇的第二條直線就比較好,因爲

  • 投影誤差比第一條直線小
  • 與第一種情況相比,投影后的數據點分佈更廣,即方差更大

上面提到的兩點是有聯繫的,即如果我們最小化重建誤差,那麼方差也會增大。

爲什麼?

證明:https://stats.stackexchange.com/questions/32174/pca-objective-function-what-is-the-connection-between-maximizing-variance-and-m/136072#136072

到現在爲止我們做的有:

  • 我們已經計算了原始數據矩陣 XX 的協方差矩陣

現在我們要變換原始數據點,使得變換後的數據協方差矩陣爲對角陣。那麼如何做呢?

Y=PXY=PX

其中,XX 爲原始數據集,YY 爲變換後的數據集。

爲了簡便,我們忽略平均項並且假設數據已經中心化(be centered),即 X=(XXˉ)X = (X - \bar{X}),那麼

Cx=1nXXTCy=1nYYT=1n(PX)(PX)T=1nPXXTPT=P(1nXXT)PT=PCxPT\begin{aligned} C_x &= \frac{1}{n}XX^T \\ C_y &= \frac{1}{n}YY^T \\ &= \frac{1}{n}(PX)(PX)^T \\ &= \frac{1}{n}PXX^TP^T \\ &= P(\frac{1}{n}XX^T)P^T \\ &= PC_xP^T \end{aligned}

這就是其中的原理:如果我們能找到 CxC_x 的特徵向量矩陣並且用其作爲矩陣 PPPP 用於將 XX 變換爲 YY,看上面的公式),那麼 CyC_y(變換後數據的協方差) 就是對角陣。所以 YY 就是新的變換後的數據點。

現在,如果我們想要將數據變換爲 kk 維,那麼我們可以選擇矩陣 CxC_x 的前 kk 個特徵向量(根據特徵值降序排列)組成一個矩陣,這就是矩陣 PP

如果我們有 mm 維的 nn 個原始數據點,那麼

X:m×nX:m \times n

P:k×mP:k \times m

Y=PX:(k×m)(m×n)=(k×n)Y=PX:(k \times m)(m \times n)=(k \times n)

所以,我們變換後的矩陣將是 nn 個數據點 kk 維。

但是爲什麼這個原理有效呢?

證明:

首先讓我們來看一些定理:

  • 定理 1:正交矩陣的逆是其轉置,爲什麼?

    AA 是一個 m×nm \times n 的正交矩陣(譯者注:根據定義,正交矩陣一定是方陣,此處應 m=nm=n),aia_i 是第 ii 個列向量,矩陣 ATAA^TA 的第 ijij 個元素爲:

    (ATA)ij=aiTaj={1,if i = j0,otherwise\begin{aligned} (A^TA)_{ij} &= a_i^Ta_j \\\\ &= \begin{cases} 1, & \text{if $i$ = $j$} \\\\ 0, & \text{otherwise} \end{cases} \end{aligned}

    ATA=IA^TA = I,所以 A1=ATA^{-1} = A^T

  • 定理 2:

    AA 是一個實對稱矩陣,λ1,λ2, ,λk\lambda_1,\lambda_2,\cdots,\lambda_kAA 的不同的特徵值,uiRnu_i \in R^n 非零,且 1ik1 \leq i \leq k,那麼 u1,u2, ,uk{u_1,u_2,\cdots,u_k} 就組成一個正交規範集(orthonormal set)。

    證明:

    對於 iji \neq j,且 1i,jk1 \leq i,j \leq k,由於 AT=AA^T = A,我們有

    λiui,uj=λiui,uj=Aui,uj=ui,ATuj=ui,Auj=λjui,uj\begin{aligned} \lambda_i \langle u_i,u_j \rangle &= \langle \lambda_iu_i,u_j \rangle \\\\ &= \langle Au_i,u_j \rangle \\\\ &= \langle u_i,A^Tu_j \rangle \\\\ &= \langle u_i,Au_j \rangle \\\\ &= \lambda_j \langle u_i,u_j \rangle \\\\ \end{aligned}

    由於 iji \neq j,我們有 λiλj\lambda_i \neq \lambda_j,所以 ui,uj=0\langle u_i, u_j \rangle = 0

  • 定理 3:

    AAn×nn \times n 的實對稱矩陣且所有特徵值都不相同,那麼存在一個正交矩陣 PP,使得 P1AP=DP^{-1}AP=D,其中 DD 爲對角陣,對角元素爲 AA 的特徵值。

    證明:

    AA 有特徵值 λ1,λ2, ,λn\lambda_1,\lambda_2,\cdots,\lambda_nuiRnu_i \in R^nui=1|u_i| = 1Aui=λiuiAu_i=\lambda_iu_i1in1 \leq i \leq n。通過推論,矩陣 P=[u1,u2, ,un]P=[u_1,u_2,\cdots,u_n] 是可逆的且 P1AP=DP^{-1}AP=D,是一個對角陣。而且,由定理 2,(u1,u2, ,un)(u_1,u_2,\cdots,u_n) 是一個正交規範集,所以 PP 確實是一個正交矩陣。

有了這些定理,我們可以說:

一個對稱陣可以通過其正交特徵向量進行對角化。正交規範向量(orthonormal vectors)只是規範化的正交向量(orthogonal
vectors
)。

譯者注:關於 orthonormal vectors 和 orthogonal
vectors 的區別可參見 6.3 Orthogonal and orthonormal vectors - UCL,我摘抄部分如下:

Definition. We say that 2 vectors are orthogonal if they are perpendicular to each other. i.e. the dot product of the two vectors is zero.

Definition. A set of vectors S is orthonormal if every vector in S has magnitude 1 and the set of vectors are mutually orthogonal.

Cy=PCxPT=P(EDE)PT=P(PTDP)PT=(PPT)D(PPT)=(PP1)D(PP1)CY=D\begin{aligned} C_y &= PC_xP^T \\\\ &= P(E^DE)P^T \\\\ &= P(P^TDP)P^T \\\\ &= (PP^T)D(PP^T) \\\\ &= (PP^{-1})D(PP^{-1}) \\\\ C_Y &= D \end{aligned}

很明顯是 PP 對角化了 CyC_y。這就是 PCA 的目標,我們可以使用矩陣 PPCyC_y 來總結 PCA 的結果。

  • X 的主成分是 CxC_x 的特徵向量
  • CyC_y 的第 ii 個對角元素是 XXii 維度上的方差

總結:

[new data]k×n=[top k eigenvectors]k×m[original data]m×n[\text{new data}]_{k\times n} = [\text{top $k$ eigenvectors}]_{k \times m}[\text{original data}]_{m \times n}

Note:PCA 是一種分析方法。你可以使用 SVD 做 PCA,或者使用特徵分解(就像我們這裏做的一樣)做 PCA,或者使用其他方法做 PCA。SVD 只是另一種數值方法。所以不要混淆 PCA 和 SVD 這兩個術語。但是有時我們會因爲性能因素選擇 SVD 而不是特徵分解或者其他方法(這個不用關心),我們會在接下來的文章中探索 SVD。

譯者注:關於 SVD,有興趣的話可以參考我寫的另一篇文章:奇異值分解 SVD 的數學解釋

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