詳解主成分分析PCA

主成分分析( Principal components analysis),簡稱PCA,是最主要的數(shù)據(jù)降維方法之一。本文從PCA的思想開始,一步一步推導(dǎo)PCA。

1.0 PCA的最大可分性的思想

對于X = \begin {bmatrix} x_1 \\ x_2 \\ ... \\ x_n \end{bmatrix}, X \in R^n。我們希望Xn維降到 n^{'} 維,同時希望信息損失最少。比如,從n = 2維降到 n^{'} = 1

image.png

我們既可以降維到第一主成分軸,也可以降維到第二主成分軸。那么如何找到這這些主成分軸并且選擇最優(yōu)成分軸呢?

直觀上,第一主成分軸 優(yōu)于 第二主成分軸,即具有最大可分性。
下面解決一些基本概念。

2.0 基變換

欲獲得原始數(shù)據(jù)新的表示空間,最簡單的方法是對原始數(shù)據(jù)進行線性變換(基變換):

Y = PX

其中X是原始樣本,P是基向量,Y是新表達。

數(shù)學(xué)表達:
\begin{bmatrix} p_1 \\ p_2 \\ \vdots \\ p_R \end{bmatrix}_{R \times N} \begin{bmatrix} x_1 & x_2 & \cdots & x_M \end{bmatrix}_{N \times M} = \begin{bmatrix} p_1 x_1 & p_1 x_2 & \cdots & p_1 x_M \\ p_2 x_1 & p_2 x_2 & \cdots & p_2 x_M \\ \vdots & \vdots & \ddots & \vdots \\ p_R x_1 & p_R x_2 & \cdots & p_R x_M\end{bmatrix}_{R\times M}

其中p_i是行向量,表示第i個基,x_j是一個列向量,表示第j個原始數(shù)據(jù)記錄.
R < N時即 基的維度 < 數(shù)據(jù)維度時,可達到降維的目的。即:
X \in R^{N \times M} \rightarrow Y \in R^{R \times M }

以直角坐標系下的點(3,2)為例,欲將點(3,2)變換為新基上的坐標,就是用(3,2)與第一個基做內(nèi)積運算,作為第一個新的坐標分量,然后用(3,2)與第二個基做內(nèi)積運算,作為第二個新坐標的分量。

image.png

實際上,我們可以用矩陣相乘的形式簡潔的表示這個變換:
\begin{bmatrix}\frac{1}{\sqrt 2} & \frac{1}{\sqrt 2} \\ -\frac{1}{\sqrt 2} & \frac{1}{\sqrt 2} \end{bmatrix} \begin{bmatrix} 3 \\ 2\end{bmatrix} = \begin{bmatrix} \frac{5}{\sqrt 2} \\ - \frac{1}{\sqrt 2} \end{bmatrix}

可以稍微推廣一下,如果我們有m個二維向量,只要將二維向量按列排成一個兩行m列矩陣,然后用“基矩陣”乘以這個矩陣,就得到了所有這些向量在新基下的值。例如(1,1),(2,2),(3,3),想變換到剛才那組基上,則可以這樣表示:
\begin{bmatrix}\frac{1}{\sqrt 2} & \frac{1}{\sqrt 2} \\ -\frac{1}{\sqrt 2} & \frac{1}{\sqrt 2} \end{bmatrix} \begin{bmatrix} 1 & 2 & 3 \\ 1 & 2 & 3\end{bmatrix} = \begin{bmatrix} 2\sqrt 2 & 4\sqrt2 & 6\sqrt2 \\ 0 & 0 & 0 \end{bmatrix}

3.0 方差

回顧一下,我們的目的是希望在降維過程中損失最少,換言之,我們希望投影后的數(shù)據(jù)盡可能分散開。這種分散程度可以用方差來表達,方差 越大,數(shù)據(jù)越分散。

定義方差Var:對于單一隨機變量a
Var(a) = \frac{1}{m} \sum_{i = 1}^m (a_i - \mu)^2
對數(shù)據(jù)做去中心化(方便后面操作):
Var(a) = \frac{1}{m} \sum_{i = 1}^m a_i ^2

隨機變量a表達了a的取值與其數(shù)學(xué)期望之間的偏離程度。若Var(a)較小,意味著a的取值主要集中在期望\mu也就是E(a)的附近,反之,若Var(a)較大,意味著a的取值比較分散。

為了避免過于抽象,我們以一個具體的例子展開。假設(shè)我們5個樣本數(shù)據(jù),分別是 x_1 = \begin{bmatrix} 1 \\ 1 \end{bmatrix}, x_2 = \begin{bmatrix} 1 \\ 3\end{bmatrix}, x_3 = \begin{bmatrix} 2 \\ 3\end{bmatrix}, x_4 = \begin{bmatrix} 4 \\ 4\end{bmatrix} ,x_5 = \begin{bmatrix} 2 \\ 4 \end{bmatrix},將它們表示成矩陣形式:
X = \begin{bmatrix} 1 & 1 & 2 & 4 & 2 \\ 1 & 3 & 3 & 4 & 4 \end {bmatrix}
為了后續(xù)處理方便,我們首先將每個字段內(nèi)所有值都減去字段均值,其結(jié)果是將每個字段都變?yōu)榫禐?.

我們看上面的數(shù)據(jù),設(shè)第一個特征為a ,第二個特征為b, 此時某一個樣本可以寫作:x_i = \begin{bmatrix} a \\ b \end {bmatrix}
且特征a的均值為2, 特征b的均值為3,所以變換后:
X = \begin{bmatrix} -1 & -1 & 0 & 2 & 0 \\ -2 & 0 & 0 & 1 & 1 \end{bmatrix}

Var(a ) = \frac{\sqrt 6} {5} Var(b ) = \frac{\sqrt 6} {5}

4.0 協(xié)方差

協(xié)方差(Covariance)在概率論統(tǒng)計學(xué)中用于衡量兩個變量的總體誤差。

比如對于二維隨機變量x_i = \begin{bmatrix} a \\ b \end{bmatrix},特征a,b除了自身的數(shù)學(xué)期望和方差,還需要討論a,b之間互相關(guān)系的數(shù)學(xué)特征。

定義協(xié)方差Cov
Cov(a, b) = \frac{1}{m}\sum_{i = 1}^m a_i b_i

Cov(a, b) = 0時,變量a,b完全獨立,這也是我們希望達到的優(yōu)化目標。

方差是協(xié)方差的一種特殊情況,即當兩個變量是相同的情況:
Cov(a, a) = Var(a)

5.0 協(xié)方差矩陣

對于二維隨機變量x_i = \begin{bmatrix} a \\ b \end {bmatrix},

定義協(xié)方差矩陣C:
C = \begin{bmatrix} Var(a) & Cov(a, b) \\ Cov(b, a) &Var(b)\end{bmatrix}

對于n維隨機變量x_i = \begin{bmatrix} x_1 \\ x_2 \\ \vdots \ x_n \end{bmatrix},

C = \begin{bmatrix} Var(x_1) & Cov(x_1, x_2) &\cdots & Cov(x_1, x_n)\\ Cov(x_2, x_1)& Var(x_2) & \cdots & Cov(x_1, x_n)\\ \vdots & \vdots & \ddots & \vdots \\ Cov(x_n, x_1) & Cov(x_n, x_2) & \cdots &Var(x_n) \end{bmatrix}

可見,協(xié)方差矩陣是nn列的對稱矩陣,主對角線上是方差,而協(xié)對角線上是協(xié)方差。

依然我們以一個具體的例子展開,還是這5個樣本數(shù)據(jù),x_1 = \begin{bmatrix} 1 \\ 1\end{bmatrix}, x_2 = \begin{bmatrix} 1 \\ 3\end{bmatrix}, x_3 = \begin{bmatrix} 2 \\ 3\end{bmatrix}, x_4 = \begin{bmatrix} 4 \\ 4\end{bmatrix} ,x_5 = \begin{bmatrix} 2 \\ 4 \\ \end{bmatrix},將它們?nèi)ブ行幕蟊硎境删仃囆问剑?br> X = \begin{bmatrix} -1 & -1 & 0 & 2 & 0 \\ -2 & 0 & 0 & 1 & 1 \end{bmatrix}
那如果有m個樣本的話,
X =\begin{bmatrix} a_1 & a_2 & \cdots &a_m \\ b_1 & b_2 & \cdots & b_m\end{bmatrix}
X做一些變換,用X乘以X的轉(zhuǎn)置,并乘上系數(shù)1/m:
\frac{1}{m}XX^T = \frac{1}{m}\begin{bmatrix} a_1 & a_2 & \cdots &a_m \\ b_1 & b_2 & \cdots & b_m\end{bmatrix}\begin{bmatrix} a_1 & b_1 \\ a_2 & b_2 \\ \vdots & \vdots \\ a_m &b_m \end{bmatrix}
= \begin{bmatrix} \frac{1}{m} \sum_{i = 1}^m a_i ^2 & \frac{1}{m}\sum_{i = 1}^m a_i b_i \\ \frac{1}{m}\sum_{i = 1}^m a_i b_i& \frac{1}{m} \sum_{i = 1}^m b_i^2 \end{bmatrix}

這不正是協(xié)方差矩陣嘛!

現(xiàn)在我們可以說:

設(shè)我們有m個n維數(shù)據(jù)記錄,將其按列排成n乘m的矩陣X,設(shè)C = \frac{1}{m}XX^T,則C是一個對稱矩陣,其對角線分別個各個特征的方差,而第i行j列和j行i列元素相同,表示i和j兩個特征之間的協(xié)方差。

6.0 協(xié)方差矩陣對角化

回顧一下:

  1. 現(xiàn)在我們有m個樣本數(shù)據(jù),每個樣本有n個特征,那么設(shè)這些原始數(shù)據(jù)為XXnm列的矩陣。
  2. 想要找到一個基P,使Y_{r \times m} = P_{r \times n}X_{n \times m},其中r<n,達到降維的目的。

設(shè)X的協(xié)方差矩陣為C,Y的協(xié)方差矩陣為D,且Y = PX。

我們的目的變?yōu)椋簩υ紨?shù)據(jù)X做PCA后,得到的Y的協(xié)方差矩陣D的各個方向方差最大,協(xié)方差為0。
那么CD是什么關(guān)系呢?

D = \frac{1}{m}YY^T
= \frac{1}{m} (PX)(PX)^T
= \frac{1}{m}PXX^TP^T
= \frac{1}{m}P(XX^T)P^T
= PCP^T
= P \begin{bmatrix} \frac{1}{m} \sum_{i = 1}^m a_i ^2 & \frac{1}{m}\sum_{i = 1}^m a_i b_i \\ \frac{1}{m}\sum_{i = 1}^m a_i b_i& \frac{1}{m} \sum_{i = 1}^m b_i^2 \end{bmatrix} P^T

我們要找的P不是別的,而是能讓原始協(xié)方差矩陣對角化的P

換句話說,優(yōu)化目標變成了尋找一個矩陣P,滿足PCP^??是一個對角矩陣,并且對角元素按從大到小依次排列,那么P的前K行就是要尋找的基,用P的前K行組成的矩陣乘以X就使得X從N維降到了K維并滿足上述優(yōu)化條件。

現(xiàn)在所有焦點都聚焦在了協(xié)方差矩陣對角化問題上。

由上文知道,協(xié)方差矩陣C是一個是對稱矩陣,在線性代數(shù)上,實對稱矩陣有一系列非常好的性質(zhì):

1)實對稱矩陣不同特征值對應(yīng)的特征向量必然正交。

2)設(shè)特征向量\lambda重數(shù)為r,則必然存在r個線性無關(guān)的特征向量對應(yīng)于\lambda,因此可以將這r個特征向量單位正交化。

由上面兩條可知,一個nn列的實對稱矩陣一定可以找到n個單位正交特征向量,設(shè)這n個特征向量為e_1,e_2,?,e_n,我們將其按列組成矩陣:
E = \begin{bmatrix} e_1 & e_2 & \cdots \ e_n\end{bmatrix}

則對協(xié)方差矩陣C有如下結(jié)論:
E^T C E = \Lambda = \begin{bmatrix} \lambda_1 \\ & \lambda_2 \\ &&\ddots \\ &&&\lambda_n\end {bmatrix}

其中\Lambda為對角矩陣,其對角元素為各特征向量對應(yīng)的特征值(可能有重復(fù))。

結(jié)合上面的公式:
D = PCP^T
其中,D為對角矩陣,我們可以得到:
P = E^T
P是協(xié)方差矩陣C的特征向量單位化后按行排列出的矩陣,其中每一行都是C的一個特征向量。如果設(shè)P按照\Lambda中特征值的從大到小,將特征向量從上到下排列,則用P的前K行組成的矩陣乘以原始數(shù)據(jù)矩陣X,就得到了我們需要的降維后的數(shù)據(jù)矩陣Y。

7.0 PCA算法

總結(jié)一下PCA的算法步驟:

設(shè)有mn維數(shù)據(jù)。

1)將原始數(shù)據(jù)按列組成nm列矩陣X

2)將X的每一行(代表一個特征)進行零均值化,即減去這一行的均值

3)求出協(xié)方差矩陣C=\frac{1}{m}XX^??

4)求出協(xié)方差矩陣C的特征值及對應(yīng)的特征向量

5)將特征向量按對應(yīng)特征值大小從上到下按行排列成矩陣,取前k行組成矩陣P

6)Y=PX即為降維到k維后的數(shù)據(jù)

8.0 實例

這里以上文提到的:
x_1 = \begin{bmatrix} 1 \\ 1\end{bmatrix}, x_2 = \begin{bmatrix} 1 \\ 3\end{bmatrix}, x_3 = \begin{bmatrix} 2 \\ 3\end{bmatrix}, x_4 = \begin{bmatrix} 4 \\ 4\end{bmatrix} ,x_5 = \begin{bmatrix} 2 \\ 4\end{bmatrix},將它們表示成矩陣形式:
X = \begin{bmatrix} 1 & 1 & 2 & 4 & 2 \\ 1 & 3 & 3 & 4 & 4 \end {bmatrix}

我們用PCA方法將這組二維數(shù)據(jù)其降到一維。

為了后續(xù)處理方便,我們首先將每個特征內(nèi)所有值都減去字段均值,其結(jié)果是將每個字段都變?yōu)榫禐?.
X = \begin{bmatrix} -1 & -1 & 0 & 2 & 0 \\ -2 & 0 & 0 & 1 & 1 \end{bmatrix}
因為這個矩陣的每行已經(jīng)是零均值,這里我們直接求協(xié)方差矩陣:
C = \frac{1}{5} \begin{bmatrix} -1 & -1 & 0 & 2 & 0 \\ -2 & 0 & 0 & 1 & 1 \end{bmatrix}\begin{bmatrix} -1 & -2 \\ -1 & 0 \\ 0 & 0 \\ 2 & 1\\ 0 & 1 \end{bmatrix} = \begin{bmatrix} \frac{6}{5} & \frac{4}{5} \\ \frac{4}{5} & \frac{6}{5}\end{bmatrix}
對于矩陣C:
C = \begin{bmatrix} \frac{6}{5} & \frac{4}{5} \\ \frac{4}{5} & \frac{6}{5}\end{bmatrix}
\lambdav分別是特征值和特征向量,
\because Cv = \lambda v,則:
(C - \lambda I)v = 0
為了使這個方程式有非零解,矩陣(C - \lambda I)的行列式必須是0
det(C - \lambda I) = 0
即:
det(\begin{bmatrix} \frac{6}{5}-\lambda & \frac{4}{5} \\ \frac{4}{5} & \frac{6}{5}-\lambda\end{bmatrix}) = 0
則:
(\frac{6}{5}-\lambda) ^2 -\frac{16}{25} = 0
分解得:
(\lambda -2)(5\lambda -2) = 0
找到2個特征值,\lambda = 2, \lambda = \frac{2}{5},

when \lambda = 2:
(C - \lambda I)v = 0
即:
\begin{bmatrix} -\frac{4}{5} & \frac{4}{5} \\ \frac{4}{5} & - \frac{4} {5} \end{bmatrix} \begin{bmatrix} v_1 \\ v_2 \\ \end{bmatrix} = \begin{bmatrix} 0 \\ 0\\ \end{bmatrix}
則:
v_1 - v_2 = 0
v_1v_2可以取任意值,我們?nèi)w一化的v_1v_2,即:v_1^2 + v_2^2 = 1,
此時v_1 = \frac{\sqrt{2} } {2}v_2 = \frac{\sqrt{2} } {2}
v = \begin{bmatrix}\frac{\sqrt{2} } {2} \\ \sqrt{2} \over 2 \end{bmatrix}

when \lambda = \frac{2}{5}:
(C - \lambda I)v = 0
即:
\begin{bmatrix} \frac{4}{5} & \frac{4}{5} \\ \frac{4}{5} & \frac{4} {5} \end{bmatrix} \begin{bmatrix} v_1 \\ v_2 \\ \end{bmatrix} = \begin{bmatrix} 0 \\ 0 \\ \end {bmatrix}
則:
v_1 + v_2 = 0
v_1v_2可以取任意值,我們?nèi)w一化的v_1v_2,即:v_1^2 + v_2^2 = 1
此時v_1 = \frac{\sqrt{2} } {2}v_2 = -\frac{\sqrt{2} } {2}
v = \begin{bmatrix} -\frac{\sqrt{2} } {2} \\ \sqrt{2} \over 2 \end{bmatrix}

所以:
P = \begin{bmatrix} \sqrt{2} \over 2 & \sqrt{2} \over 2 \\ -\sqrt{2} \over 2 & \sqrt{2} \over 2 \\\end{bmatrix}

可以驗證協(xié)方差矩陣C的對角化:
PCP^T = \begin{bmatrix} \sqrt{2} \over 2 & \sqrt{2} \over 2 \\ -\sqrt{2} \over 2 & \sqrt{2} \over 2 \\ \end{bmatrix} \begin{bmatrix} \frac{6}{5} & \frac{4}{5} \\ \frac{4}{5} & \frac{6}{5} \end{bmatrix} \begin{bmatrix} \sqrt{2} \over 2 & -\sqrt{2} \over 2 \\ \sqrt{2} \over 2 & \sqrt{2} \over 2 \\ \end{bmatrix} = \begin{bmatrix} 2 & 0 \\ 0 & \frac{2}{5}\end {bmatrix}
最后我們用P的第一行乘以數(shù)據(jù)矩陣,就得到了降維后的表示:
Y = PX = \begin{bmatrix} \sqrt{2} \over 2 & \sqrt{2} \over 2 \end{bmatrix} \begin{bmatrix} -1 & -1 & 0 & 2 & 0 \\ -2 & 0 & 0 & 1 & 1 \end{bmatrix} = \begin{bmatrix} -\frac{3}{2} \sqrt 2 & -\frac{\sqrt 2} {2} & 0 & \frac{3}{2} \sqrt 2 & \frac{\sqrt 2} {2}\end{bmatrix}

降維投影結(jié)果如下圖:


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容