主成分分析PCA(principal component analysis)原理
PCA在很多方面均有應用,但是之前沒有仔細探究過,最近看了一些博客和論文,做一下總結。
主成分分析(Principal Component Analysis,PCA), 是一種統計方法。通過正交變換將一組可能存在相關性的變量轉換為一組線性不相關的變量,轉換后的這組變量叫主成分。為什么需要PCA?
通俗一點說,PCA是一種降維的方法。我們知道,維數越大通常越難處理,在機器學習中,得到的數據維數通常都很高,處理起來很麻煩,資源消耗很大,因此對數據進行降維處理是很必要的。
但是降維就意味著信息的丟失嗎?多少是有一點的。但是總有一些情況,讓我們能能夠在信息損失相對比較少的同時完成降維。比如:
- 如果某兩個特征之間存在關聯。舉個比較極端的的例子,一個正方形的邊長和它的面積,各屬于兩個特征,但是知道了邊長面積肯定是確定的,那么就可以直接丟掉一列(邊長或面積)。
- 如果某個維度存在并沒有什么價值。這里舉個比較經典的例子,就是電視轉播球賽,把現場的三維轉成平面的二維呈現在你眼前,減少了一維但是對于觀眾來說,并無太大影響。
- ......
通過減少冗余信息,降低了維度,讓之后處理數據更加容易,而有大部分有價值的信息都保留下來。而到底哪些信息是重要的?哪些可以刪去?在這里還要注意:降維并不簡單的值刪去某個維度,大部分情況下,降維的同時基也改變了。那么如何選取新的基?這就是PCA解決的問題。
補充看到過的一個比較好的例子:
假設我們整理了30個人的體重,身高和IQ,放在一個矩陣中,每一列是一個樣本(一個人的這三個變量)。為了便于觀察可以在三維坐標中描點,每一維代表一個變量。提出問題:
- 有沒有更簡單的使數據可視化的方法?對于這個三維圖像,能否在二維空間中描述它?
- 那些變量間是相互關聯的?在這個例子中,根據常識,應該認為身高和IQ沒有必然聯系,而身高和體重有一定的聯系。
- 有沒有一個變量能夠描述整個數據集?
PCA原理分析
目標
先簡單描述一下PCA要做的事。
假設有一組數$\begin{pmatrix}1 & 1 & 2 & 4 & 2 \\1 & 3 & 3 &4& 4\end{pmatrix}$, 先做簡單處理,每個數減去均值,這樣算方差的時候方便(因為要減均值),得到$\begin{pmatrix}-1 & -1 & 0 & 2 & 0\\-2 & 0 & 0 & 1 & 1\end{pmatrix}$
在二維坐標系中描出:
因為這里只是二維的,那么要降成一維就是在這個二維平面重新找一個方向,并把這些點映射到這個方向上。試想,怎么才能找到這個方向,且不損失大部分信息呢?
容易想到,最后找到的這個方向,這些點的投影都不重疊,分隔的較遠。
提出假設和目標:
- 充分統計量(sufficient statistic),即當知道這些量的時候,這個分布就可以確定了,均值和方差可以看成是其充分統計量。
- 大的方差(variances)代表這個量的強動態性,就是說如果映射到新坐標上擁有大的方差,那么這個維度可以較好的反應數據的特征。
- 主成分需要正交,這個可以看下面關于方差和協方差的討論,正交代表兩成分相關性為0,這樣坐標的選取才有意義。
如何達到這些目的呢?先看一些概念和例子。
基變換
若使用我們慣用的二維直角坐標系來表示這個下圖這個向量。
很顯然是 (3, 2), 這時二維空間的一組基是(1, 0)和(0, 1), 容易證明二維空間中所有向量(x, y)都能用這組基來表示, 實際上
$$ \begin{bmatrix}x\\ y\\\end{bmatrix} = x*(1,0)^\mathsf{T}+y*(0,1)^\mathsf{T} $$
任何兩個線性無關的二維向量都可以成為二維空間的一組基。
如果以 $(\frac{1}{\sqrt{2}},\frac{1}{\sqrt{2}})$ 和$(-\frac{1}{\sqrt{2}},\frac{1}{\sqrt{2}})$為基(一般選取的基模為1),如下圖所示。
那么這個向量就表示為 $(\frac{5}{\sqrt{2}},-\frac{1}{\sqrt{2}})$, 這是如何計算出來的呢?
想想也很簡單,就是把這個向量投影到基的方向上,投影到長度就是那一維的坐標值,比如(3, 2)投影到$(\frac{1}{\sqrt{2}},\frac{1}{\sqrt{2}})$方向上。
根據投影公式,A投影到B的矢量長度為 $|A|*cos(a)$, 其中$|A|=\sqrt{x_1^2+y_1^2}$是向量A的模,即矢量長度。
而,$A\cdot B=|A||B|cos(a)$, 而基的模通常都處理為1的,意味著 $|B| = 1$, 觀察等號右邊,那投影的長度不就是向量的基嗎?
那么跟容易就可以得到,(3, 2)在基$(\frac{1}{\sqrt{2}},\frac{1}{\sqrt{2}})$的投影可以用 $3*\frac{1}{\sqrt{2}} + 2*\frac{1}{\sqrt{2}}$ 算出。
通過上面的推導,要直接算出向量在新基上的投影,可以用此向量乘以基矩陣,即
$$\begin{pmatrix}1/\sqrt{2}& 1/\sqrt{2} \\-1/\sqrt{2} & 1/\sqrt{2}\end{pmatrix}\begin{pmatrix}3 \\2\end{pmatrix}=\begin{pmatrix}5/\sqrt{2} \\-1/\sqrt{2}\end{pmatrix}$$
有m個二維向量,也可以直接算出他們在新基上的坐標,例如將 (1,1),(2,2), (3,3) 映射到新基。
$$\begin{pmatrix}1/\sqrt{2} & 1/\sqrt{2} \\-1/\sqrt{2} & 1/\sqrt{2}\end{pmatrix}\begin{pmatrix}1 & 2 & 3 \\1 & 2 & 3\end{pmatrix}=\begin{pmatrix}2/\sqrt{2} & 4/\sqrt{2} & 6/\sqrt{2} \\0& 0 & 0\end{pmatrix}$$
由此推廣到高維的基變換。
設X是原始的數據向量的集合(m*n),每一列是一個樣本。設Y是一個m*n的矩陣,由P矩陣施予其變換而得,P中是新的坐標向量。
$$PX = Y$$
$$PX = \begin{bmatrix}p_{1}\\ ...\\p_{m}\end{bmatrix}\begin{bmatrix}x_{1} & ... & x_{n}\end{bmatrix}$$
$$Y =\begin{bmatrix}p_{1}x{1} &... & p_{1}x_{n}\\ ...& ...&... \\ p_{m}x_{1} & ... & p_{m}x_{n}\end{bmatrix}$$
那么,Y中的每一列,設為$y_{i}$:
$$y_{i} = \begin{bmatrix}p_{1}x_{i} \\ ...\\ p_{m}x_{i} \end{bmatrix}$$
觀察式子,點乘,正是前面推導過的,Y的每一列就是X的每一列映射到新基上的新坐標。
方差和協方差
觀察一下,對于二維的,我們看圖就可以得出圖(c)兩個變量有高的相關性,也就是表示其中一維可以直接去掉。但是多維的無法看圖判斷。這時候就需要協方差,考察變量間的相關性。
注意:在處理之前,先將數據減去均值。這樣之后計算方差時要減均值,就相當于減0,處理起來比較方便。
定義向量 A = {a1, a2, . . . , an} , B = {b1, b2, . . . , bn}.
他們各自的方差: $ \sigma ^{2}_{A} = <a_{i}a_{i}>_{i} , \sigma ^{2}_{B} = <b_{i}b_{i}>_{i} $
協方差:$ Cov(a,b) = \sigma ^{2}_{AB} = <a_{i}b_{i}>_{i} $
上面的尖括號只是一個符號,$ <a_{i}b_{i}>_{i}$代表$\frac{1}{m}\sum_{i=1}^m{a_ib_i}$, 另外,如果不記得協方差的話可以回去看看。
簡單來說,協方差為0,即相關性為0。
將向量A和B轉換為: A = [a1, a2, . . . , an], B = [b1, b2, . . . , bn].
那么,協方差就可以表示為點乘形成的矩陣:
$$ \sigma ^{2}_{AB} =\frac{1}{n-1}ab^T$$
拓展到多維的情況,定義
$$X = \begin{bmatrix}x_{1}\\ x_{2}\\ ...\\ x_{3}\end{bmatrix}$$
這里令 x1 = a, x2 = b,....那么,得到協方差矩陣:
$$ C_{X} = \frac{1}{n-1}XX^{T}$$
注意1/n-1是避免偏差估計的方法,這個我沒有了解過就不展開了,為了討論方便,之后就用1/m代替1/n-1。
- 矩陣 CX 是一個m*m的對稱方陣
- 矩陣 CX 上對角線上的元素是各元素的方差
- 矩陣 CX 上非對角線上的元素是協方差
舉個例子,假設就兩個變量,那么對應上面$X = \begin{bmatrix}x_{1}\\ x_{2}\\\end{bmatrix}$。假設把數據集中的點描到圖像上是這樣的:
觀察圖像,水平方向具有比較大的方差(數據偏離平均較大),可以想象$C_{11}$(代表x1方差)應該比較大,垂直方向上,方差較小,$C_{22}$應該較小,再看他們的相關性,應該是比較小的,那么$C_{12}$和$C_{21}$也應該比較小,可能我們算出的協方差矩陣類似于這樣:
$$S=\begin{bmatrix}95 & 1\\ 1& 5\end{bmatrix}$$
假設畫出來的圖是這樣的:
類似的分析,在水平方向和初值方向的方差都挺大的,并且容易看出正相關性,那么得到的協方差矩陣應該類似于這樣:
$$S=\begin{bmatrix}50 & 40\\ 40& 50\end{bmatrix}$$
可以回去看看我們的目標,降維要找到新的坐標軸,為了保留數據的重要信息,第一個新的坐標軸的選取就是方差最大的那個方向,而第二個新的坐標軸,如果選方差第二大的方向,那么不太有意義,因為那必定和第一個新坐標軸幾乎重疊,那么他們是相關的,沒有意義,因此應該選取與之正交的方向。
至此,還沒有達到目的,還需要對協方差矩陣對角化。
對角化
先回顧一下線性代數中的知識。
- 定理:如果A是實對稱矩陣($A=A^{T}$),那么A是正交矩陣,并且可對角化,而且只有實特征值,換句話說,存在實數特征值$\lambda_{1},...\lambda_{n}$,和正交的非零向量(特征向量)$\vec{v_{1}}, ..., \vec{v_{n}}$,使:
$$A\vec{v_{i}}=\lambda_{i}\vec{v_{i}}$$
注意前提,是對稱矩陣,但是,如果A是m*n的矩陣,那么$AA^{T}$和$A^{T}A$都是對稱矩陣!
- 推論:矩陣$AA^{T}$和$A^{T}A$的擁有相同的非零特征值。
- 證明:設$\vec{v}$是$A^{T}A$的特征值,那么:
$$(A^{T}A)\vec{v}=\lambda\vec{v}$$
兩邊同時左乘$A$,利用矩陣的結合律,得到:
$$AA^{T}(A\vec{v})=\lambda(A\vec{v})$$
即雖然$AA^{T}$和$A^{T}A$的特征向量不同,但是特征值相同!
這有什么用呢?比如A是一個500*2的矩陣,如果要算$AA^{T}$的特征值,那么就要處理500*500的矩陣,通過上面的定理,等價于求$A^{T}A$的特征值,那么只用處理2*2的矩陣!得到兩個特征值,剩下的498個特征值均為0!
接下來回到PCA,首先明確,為什么需要將協方差矩陣對角化?
結合前面基變換(忘記了可以跳回去)的推導,和矩陣的相關知識,基變換后X變為Y,設Y的協方差矩陣為$C_{Y}$,設原始數據矩陣X的協方差矩陣為$C_{x}$,那么
$$\begin{array}{l l l}C_{Y} & = & \frac{1}{m}YY^\mathsf{T}\\& = & \frac{1}{m}(PX)(PX)^\mathsf{T}\\& = & \frac{1}{m}PXX^\mathsf{T}P^\mathsf{T} \\& = & P(\frac{1}{m}XX^\mathsf{T})P^\mathsf{T} \\& = & PC_{X}P^\mathsf{T}\end{array}$$
還記得P是新坐標向量的矩陣嗎?
那么,只要對角化原始矩陣X,(這里涉及矩陣分解的知識),所得到的P,滿足$PCP^T$是一個對角矩陣,并且對角元素按從大到小依次排列,那么P的前K行就是要尋找的基(K取決于你要將數據降到幾維),用P的前K行組成的矩陣乘以X就使得X從N維降到了K維,并滿足上述優化條件。
對角化一般簡單的方法就是解特征方程,得到特征值,求特征向量,這里就不再贅述。
總結
下面是如何在數據集中使用PCA。
例子
回到上面目標那一節的數據。
$$\begin{pmatrix}-1 & -1 & 0 & 2 & 0\\-2 & 0 & 0 & 1 & 1\end{pmatrix}$$
這是已經減去均值之后的了。
進入第二步,求解其協方差矩陣:
$$C=\frac{1}{5}\begin{pmatrix}-1 & -1 & 0 & 2 & 0 \\-2 & 0 & 0 & 1 & 1\end{pmatrix}\begin{pmatrix}-1 & -2 \\-1 & 0 \\0 & 0\\2 & 1 \\0 & 1\end{pmatrix}=\begin{pmatrix}\frac{6}{5} &\frac{4}{5} \\\frac{4}{5} & \frac{6}{5}\end{pmatrix}$$
第三步,求特征值,得到:
$$\lambda_1=2,\lambda_2=2/5$$
可以看到2和2/5還是相差挺多的。
對應的特征向量通解:
$$c_1\begin{pmatrix}1 \\1\end{pmatrix},c_2\begin{pmatrix}-1\\1\end{pmatrix}$$
其中c1,c2為任意實數,習慣上標準化,得到:
$$\begin{pmatrix}1/\sqrt{2} \\1/\sqrt{2}\end{pmatrix},\begin{pmatrix}-1/\sqrt{2} \\1/\sqrt{2}\end{pmatrix}$$
即得新基矩陣P:
$$P=\begin{pmatrix}1/\sqrt{2} & 1/\sqrt{2} \\-1/\sqrt{2} & 1/\sqrt{2}\end{pmatrix}$$
可以驗證對角化:
$$PCP^\mathsf{T}=\begin{pmatrix}1/\sqrt{2} & 1/\sqrt{2} \\-1/\sqrt{2} & 1/\sqrt{2}\end{pmatrix}\begin{pmatrix}6/5 & 4/5 \\4/5 & 6/5\end{pmatrix}\begin{pmatrix}1/\sqrt{2} & -1/\sqrt{2} \\1/\sqrt{2} & 1/\sqrt{2}\end{pmatrix}=\begin{pmatrix}2 & 0 \\0 & 2/5\end{pmatrix}$$
要使二維降到一維,去P中的第一行作為新基,就得到這些點降維后的表示:
$$Y=\begin{pmatrix}1/\sqrt{2} & 1/\sqrt{2}\end{pmatrix}\begin{pmatrix}-1 & -1 & 0 & 2 & 0 \\-2 & 0 & 0 & 1 & 1\end{pmatrix}=\begin{pmatrix}-3/\sqrt{2} & -1/\sqrt{2} & 0 & 3/\sqrt{2} & -1/\sqrt{2}\end{pmatrix}$$
局限
PCA的優勢和弱點都在于它的無參數分析,它的步驟很固定,也不需要調參之類的,當然這也成了它的局限性。拓展可以考慮通過Kernel函數將非線性相關轉為線性相關。有興趣可以查閱相關論文。
參考資料:
1.A Tutorial on Principal Component Analysis ,Jonathon Shlens
2.PCA的數學原理
3.Principal component analysis with linear algebra ,Jeff Jauregui
總結
以上是生活随笔為你收集整理的主成分分析PCA(principal component analysis)原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: centos7 git安装
- 下一篇: [转]application.prope