主成分分析即Principal Component Analysis,PCA,它是一種線性降維方法。
主成分分析(1)
PCA即主成分分析(Principe Component Analysis)。PCA假設降維函數是一個linear function,即輸入\(x\)和輸出\(z\)之間是linear transform \(z=Wx\),而PCA要做的就是根據很多個\(x\)找出\(W\)。
PCA for 1-D
爲了簡化問題先假設輸出\(z=W\cdot x\)是1個標量(scalar),其中\(W\)是1個行向量(row vector)、\(x\)是1個列向量。若假設\(W\)的模(長度)\(||W||_2=1\),此時\(z\)就是\(x\)在\(W\)方向上的投影。
我們希望所有\(x\)在\(W\)方向上投影得到的所有\(z\)分佈越大越好,也就是說在投影之後不同樣本之間的區別仍然是可以被看得出來的,所以投影結果的variance越大越好,即我們希望找到一個使得投影結果的variance較大的\(W\),variance的計算公式爲\(Var(z)=\frac{1}{N}\sum\limits_{z}(z-\bar{z})^2, ||W||_2=1\),其中\(\bar z\)是所有\(z\)的平均值。
PCA for n-D
如果輸出\(z=Wx\)是1個包含\(n\)個元素的向量(\(n\)需要我們自己確定),其中\(W\)是1個matrix、\(w^i\)是\(W\)中的第\(i\)個行向量(\(||w^i||_2=0,1\leq i\leq n\))、\(x\)是1個列向量,則\(z_i=w^i\cdot x\)表示\(x\)在方向\(w^i\)上的投影。
注:\(w^i\)必須相互正交,即\(W\)爲正交矩陣(Orthogonal Matrix),否則最終找到的\(w^i\)實際上是相同的值。
拉格朗日乘子法
如何求出PCA中的參數\(W\)呢?實際上已經有相關庫可以直接調用PCA,此外也可以用神經網絡描述PCA算法然後用梯度下降的方法來求解,這裏主要介紹用拉格朗日乘子法(Lagrange multiplier)求解PCA的數學推導過程。
注:\(w^i\)和\(x\)均爲列向量,下文中類似\(w^i\cdot x\)表示的是矢量內積,而\((w^i)^T\cdot x\)表示的是矩陣相乘。
計算\(w^1\)
結論:\(w^1\)是\(S=Cov(x)\)這個matrix中的特徵向量,對應最大的特徵值\(\lambda_1\)。
首先計算出\(\bar{z_1}\):
\(Var(z_1)\)越大越好,所以我們要使得\(Var(z_1)\)最大:
因爲\((a\cdot b)^2=(a^Tb)^2=a^Tba^Tb=a^Tb(a^Tb)^T=a^Tbb^Ta\),所以:
又因爲\(Cov(x)=\frac{1}{N}\sum(x-\bar x)(x-\bar x)^T\),並令\(S=Cov(x)\),所以:
在使得\(Var(z_1)=(w^1)^TCov(x)w^1\)最大的同時,還有一個約束條件是\(||w^1||_2=(w^1)^Tw^1=1\),否則\(w^1\)無限大就可以使得\(Var(z_1)\)但這並沒有意義。
因爲\(S=Cov(x)\),所以S是對稱的(symmetric)、半正定的(positive-semidefine)、所有特徵值非負的(non-negative eigenvalues)。
使用拉格朗日乘數法,利用目標和約束條件構造函數:\(g(w^1)=(w^1)^TSw^1-\alpha((w^1)^Tw^1-1)\),對\(w^1\)中每個元素求偏微分並使爲0:
整理上式,可以得到:\(Sw^1=\alpha w^1\),其中\(w^1\)是\(S\)的特徵向量(eigenvector),但滿足\((w^1)^Tw^1=1\)的特徵向量\(w^1\)有很多,我們要找的是使得\((w^1)^TSw^1\)最大的那個\(w_1\),於是可得\((w^1)^TSw^1=(w^1)^T \alpha w^1=\alpha (w^1)^T w^1=\alpha\),因此使得\((w^1)^TSw^1\)最大就變成了使得\(\alpha\)最大,即\(S\)的特徵值\(\alpha\)最大時對應的那個特徵向量\(w^1\)就是我們要找的\(w^1\)。
計算\(w^2\)
在計算\(w^2\)時比計算\(w^1\)時多了一個限制條件:\(w^2\)必須與\(w^1\)正交(orthogonal)。
所以求解目標爲:使得\((w^2)^TSw^2\)最大,約束條件爲:\((w^2)^Tw^2=1,(w^2)^Tw^1=0\)
結論:\(w^2\)也是\(S=Cov(x)\)這個matrix中的特徵向量,對應第二大的特徵值\(\lambda_2\)
與計算\(w^1\)一樣使用拉格朗日乘子法求解,定義\(g(w^2)=(w^2)^TSw^2-\alpha((w^2)^Tw^2-1)-\beta((w^2)^Tw^1-0)\),然後對\(w^2\)的每個元素做偏微分:
整理上式可得\(Sw^2-\alpha w^2-\beta w^1=0\),該式兩側同乘\((w^1)^T\)得到\((w^1)^TSw^2-\alpha (w^1)^Tw^2-\beta (w^1)^Tw^1=0\),其中\(\alpha (w^1)^Tw^2=0,\beta (w^1)^Tw^1=\beta\)。
由於\((w^1)^TSw^2\)是vector×matrix×vector=scalar所以在外面套一個transpose不會改變其值,並且S是對稱的即\(S^T=S\),所以:
已知\(w^1\)滿足\(Sw^1=\lambda_1 w^1\),所以:
因此有\((w^1)^TSw^2=0\),\(\alpha (w^1)^Tw^2=0\),\(\beta (w^1)^Tw^1=\beta\),又根據\((w^1)^TSw^2-\alpha (w^1)^Tw^2-\beta (w^1)^Tw^1=0\),所以\(\beta=0\)。
此時\(Sw^2-\alpha w^2-\beta w^1=0\)就轉變成了\(Sw^2-\alpha w^2=0\)即\(Sw^2=\alpha w^2\)。由於\(S\)是對稱的,因此在與\(w_1\)不衝突的情況下,這裏\(\alpha\)選取第二大的特徵值\(\lambda_2\)時,可以使\((w^2)^TSw^2\)最大。
decorrelation
可知\(z=W\cdot x\),有一個神奇的事情是\(Cov(z)=D\),即z的covariance是一個對角矩陣(diagonal matrix)。
推導過程如下:
PCA可以讓降維後數據中不同dimension之間的covariance變爲0,即降維後數據中不同feature之間是沒有correlation的,這樣的好處是減少feature之間的聯繫從而減少model所需的參數量。
如果使用PCA將原數據降維之後再給其他model使用,那這些model就可以直接假設數據的各個維度不相關,這時model得到簡化、參數量大大降低,相同的數據量可以得到更好的訓練結果,從而可以避免overfitting的發生。
主成分分析(2)
Reconstruction Component
假設我們現在考慮MNIST手寫數字識別,可以假設一個數字圖片由一些類似於筆畫的component(本質上是一個28×28的vector)組成,將這些component記做\(u_1,u_2,u_3,...\),我們把\(K\)個component加權求和就可以組成一個數字圖片:\(x≈c_1u^1+c_2u^2+...+c_Ku^K+\bar x\),其中\(x\)是一張數字圖片,\(\bar x\)是所有數字圖片的平均值。
假設\(K\)個component已知,我們就可以用\(\left [\begin{matrix}c_1\ c_2\ c_3...c_k \end{matrix} \right]^T\)來表示一張數字圖片,如果\(k\)遠小於圖片像素數量,那這種表示方法就可以有效降維。
那我們要如何找出這\(K\)個component呢?我們要找到\(K\)個vector使得\(x-\bar x\)和\(\hat x\)越接近越好,其中\(\hat x=c_1u^1+c_2u^2+...+c_Ku^K\)。
所以目標是使得Reconstruction Error \(||(x-\bar x)-\hat x||\)最小,即\(L=\min\limits_{u^1,...,u^k}\sum||(x-\bar x)-(\sum\limits_{i=1}^k c_i u^i) ||_2\)。
回顧PCA中\(z=W\cdot x\),實際上我們通過PCA最終解得的\(W=\{w^1,w^2,...,w^k\}\)就是使Reconstruction Error最小化的\(K\)個vector\(\{u^1,u^2,...,u^k\}\),簡單證明如下。
如下圖和下式所示,用下圖中的矩陣相乘來表示所有的\(x^i-\bar x≈c_1^i u^1+c_2^i u^2+...\),其中\(x^i\)指第\(i\)張圖片,目標是使\(\approx\)兩側矩陣之間的差距越小越好。
使用SVD將每個matrix \(X_{m×n}\)都拆成matrix \(U_{m×K}\)、\(\Sigma_{K×K}\)、\(V_{K×n}\)的乘積,其中\(K\)爲component的數目。使用SVD拆解後三個矩陣相乘的結果是跟等號左邊的矩陣\(X\)最接近的,此時\(U\)就對應着\(u^i\)形成的矩陣、\(\Sigma\cdot V\)就對應着\(c_k^i\)形成的矩陣。
根據SVD的結論,組成矩陣\(U\)的\(k\)個列向量(標準正交向量,orthonormal vector)就是\(XX^T\)最大的\(k\)個特徵值(eignvalue)所對應的特徵向量(eigenvector),而\(XX^T\)實際上就是\(x\)的covariance matrix,因此\(U\)就是PCA的\(k\)個解。
PCA尋找\(W\)的過程,實際上就是把\(X\)拆解成能夠使得Reconstruction Error最小的\(k\)個component的過程,PCA中要找的投影方向\(w^i\)就相當於恰當的component \(u^i\),PCA中投影結果\(z^i\)就相當於各個component各自的權重\(c_i\)。
NN for PCA
由上可知,PCA找出來的\(\{w^1,w^2,...,w^k\}\)就是\(K\)個component \(\{u^1,u^2,...,u^k\}\)。\(\hat x=\sum\limits_{k=1}^K c_k w^k\),我們要使\(\hat x\)與\(x-\bar x\)之間的差距越小越好。我們已經通過SVD找到了\(w^k\)的值,而對每個不同的樣本\(x\)都有一組不同的\(c_k\)值。
在PCA中我們已經證得,\(\{w^1,w^2,...,w^k\}\)這\(k\)個vector是標準正交化的(orthonormal),因此\(c_k=(x-\bar x)\cdot w^k\),這個時候我們就可以使用神經網絡來表示整個過程,如下圖所示。
如上圖所示,假設\(x\)是3維向量,要投影到2維的component上,即\(K=2\)。\(c_k=(x-\bar x)\cdot w^k\)類似於神經網絡,\(x-\bar x\)相當於一個神經元的3維輸入,而\(w^k_1\),\(w^k_2\),\(w^k_3\)則是該神經元的權重,而\(c_k\)則是這個神經元的輸出。得到\(c_1\)和\(c_2\)之後,再讓它乘上\(w^1\)和\(w^2\)然後求和得到\(\hat x\)。此時,PCA就被表示成只含一層hidden layer的神經網絡,且這個hidden layer是線性的(沒有激活函數),訓練目標是讓這個神經網絡的輸入\(x-\bar x\)與輸出\(\hat x\)越接近越好,這就是Autoencoder。
注:PCA求解出的\(w^i\)與上述神經網絡所解得的\(w^i\)是不一樣的,因爲PCA解出的\(w^i\)是相互垂直的(orgonormal),而上述神經網絡的解無法保證\(w^i\)相互垂直,神經網絡無法做到Reconstruction Error比PCA小。因此,在linear情況下直接用PCA找\(W\)遠比用神經網絡的方式更快速方便,神經網絡的好處是它可以使用不止一層的hidden layer而可以做Deep Autoencoder。
PCA的缺點
- PCA是無監督的,沒有使用label
- PCA是線性的,而有時需要non-linear transformation
What happens to PCA
觀察PCA對MNIST和Face的降維結果(見原視頻),我們發現找到的component好像並不算是component。比如MNIST實驗中PCA找到的是幾乎完整的數字雛形,而Face實驗中找到的是幾乎完整的人臉雛形,而我們想象中的組件應該是類似於橫折撇捺、眼睛鼻子眉毛等等。
原因是這樣的:\(x\approx c_1u^1+c_2u^2+...+c_Ku^K+\bar x\),其中\(c_i\)是可正可負的,所以component不僅可以相加還可以相減,於是PCA得到的組件並不是我們想象中的那樣,但通過這些組件的加加減減肯定可以獲得我們想象中的基礎的component。
如果想要直接得到類似筆畫的基礎component,就要使用NMF(non-negative matrix factorization,非負矩陣分解)。
非負矩陣分解
如果想要直接得到類似筆畫的基礎component,就要使用NMF(non-negative matrix factorization,非負矩陣分解)。
PCA可以看成是對原始矩陣\(X\)做SVD進行矩陣分解,但並不保證分解後矩陣的正負。實際上在進行圖像處理時,如果部分component的matrix包含一些負值的話,如何處理負的像素值也會成爲一個問題(可以做歸一化處理,但比較麻煩)。
而NMF的基本思路是,強迫使所有component和它的權重都必須是正的,也就是說所有圖像都必須由組件疊加(不可相減)得到。
相比於PCA,我們可以發現NMF對MNIST和Face的降維結果(見原視頻)更接近於我們想象中的基本的component。
其它PCA版本
降維的方法有很多,這裏再列舉一些與PCA有關的方法:
-
Multidimensional Scaling (MDS) [Alpaydin, Chapter 6.7]
MDS不需要把每個data都表示成feature vector,只需要知道特徵向量之間的distance,就可以做降維,PCA保留了原來在高維空間中的距離,在某種情況下MDS就是特殊的PCA
-
Probabilistic PCA [Bishop, Chapter 12.2]
PCA概率版本
-
Kernel PCA [Bishop, Chapter 12.3]
PCA非線性版本
-
Canonical Correlation Analysis (CCA) [Alpaydin, Chapter 6.9]
CCA常用於兩種不同的data source的情況,比如同時對聲音信號和脣形的圖像進行降維
-
Independent Component Analysis (ICA)
ICA常用於source separation,PCA找的是正交的組件,而ICA則只需要找“獨立”的組件即可
-
Linear Discriminant Analysis (LDA) [Alpaydin, Chapter 6.8]
LDA是supervised的方式
Github(github.com):@chouxianyu
Github Pages(github.io):@臭鹹魚
知乎(zhihu.com):@臭鹹魚
博客園(cnblogs.com):@臭鹹魚
B站(bilibili.com):@絕版臭鹹魚
微信公衆號:@臭鹹魚
轉載請註明出處,歡迎討論和交流!