PCA
在不少方面均有應用,可是以前沒有仔細探究過,最近看了一些博客和論文,作一下總結。html
主成分分析(Principal Component Analysis,PCA)
, 是一種統計方法。經過正交變換將一組可能存在相關性的變量轉換爲一組線性不相關的變量,轉換後的這組變量叫主成分。
通俗一點說,PCA
是一種降維的方法。咱們知道,維數越大一般越難處理,在機器學習中,獲得的數據維數一般都很高,處理起來很麻煩,資源消耗很大,所以對數據進行降維處理是很必要的。機器學習
可是降維就意味着信息的丟失嗎?多少是有一點的。可是總有一些狀況,讓咱們能可以在信息損失相對比較少的同時完成降維。好比:ide
經過減小冗餘信息,下降了維度,讓以後處理數據更加容易,而有大部分有價值的信息都保留下來。而到底哪些信息是重要的?哪些能夠刪去?在這裏還要注意:降維並不簡單的值刪去某個維度,大部分狀況下,降維的同時基
也改變了。那麼如何選取新的基
?這就是PCA
解決的問題。函數
補充看到過的一個比較好的例子:
假設咱們整理了30我的的體重,身高和IQ,放在一個矩陣中,每一列是一個樣本(一我的的這三個變量)。爲了便於觀察能夠在三維座標中描點,每一維表明一個變量。提出問題:學習
- 有沒有更簡單的使數據可視化的方法?對於這個三維圖像,可否在二維空間中描述它?
- 那些變量間是
相互關聯
的?在這個例子中,根據常識,應該認爲身高和IQ
沒有必然聯繫,而身高和體重
有必定的聯繫。- 有沒有一個變量可以描述整個數據集?
先簡單描述一下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}$
在二維座標系中描出:優化
由於這裏只是二維的,那麼要降成一維就是在這個二維平面從新找一個方向,並把這些點映射到這個方向上。試想,怎麼才能找到這個方向,且不損失大部分信息呢?
容易想到,最後找到的這個方向,這些點的投影都不重疊,分隔的較遠。
提出假設和目標:ui
充分統計量(sufficient statistic)
,即當知道這些量的時候,這個分佈就能夠肯定了,均值
和方差
能夠當作是其充分統計量。正交
,這個能夠看下面關於方差和協方差的討論,正交表明兩成分相關性爲0,這樣座標的選取才有意義。如何達到這些目的呢?先看一些概念和例子。this
若使用咱們慣用的二維直角座標系來表示這個下圖這個向量。spa
很顯然是 (3, 2)
, 這時二維空間的一組基
是(1, 0)
和(0, 1)
, 容易證實二維空間中全部向量(x, y)
都能用這組基
來表示, 實際上
$$ \begin{bmatrix}x\\ y\\\end{bmatrix} = x*(1,0)^\mathsf{T}+y*(0,1)^\mathsf{T} $$ code
任何兩個線性無關的二維向量均可以成爲二維空間的一組基。
若是以 $(\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}$$
The most straight-forward normalization is 1/n. However, this provides a biased estimation of variance particularly for small n. It is beyond the scope of this paper to show that the proper normalization for an unbiased estimator is 1/n−1. ----A Tutorial on Principal Component Analysis
注意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\vec{v_{i}}=\lambda_{i}\vec{v_{i}}$$
注意前提,是對稱矩陣
,可是,若是A是m*n的矩陣,那麼$AA^{T}$和$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