關於主成分分析的理論推導(PCA降維算法)
一 特徵選擇與特徵提取
關於主成分分析,嚴格一點說,它應該屬於特徵提取,而不是特徵選擇。
我們先來看看什麼是特徵選擇?
比如現在我們的訓練數據集是:
\[
\left \{ (x_{1},y_{1}),(x_{2},y_{2}),(x_{3},y_{3}),...(x_{p},y_{p}) \right \}
\]
其中 :
\[
x_{i} = [ x_{i1} ,x_{i2} ,x_{i3} ,...x_{in} ]^{T}
\]
即\(x_{i}\)是一個n維的列向量。
那麼特徵選擇的問題是什麼呢?
問:這n個維度有冗餘,即\(x_{i}\) 的某些維度對於所研究問題無作用,那麼如何從這n個維度中選出最有用的 m(m<n)個特徵?
這是特徵選擇的問題。無論怎樣,最後出來的特徵,也只是原來特徵中挑選出來的,沒有出現新增加的特徵。
那麼特徵提取的問題是什麼呢?
n個維度\([x_{i1} ,x_{i2} ,x_{i3} ,...x_{in} ]\),構造:
\[
\left \{ f_{1}( x_{i1} ,x_{i2} ,x_{i3} ,...x_{in} ),
f_{2}( x_{i1} ,x_{i2} ,x_{i3} ,...x_{in} ),
f_{3}( x_{i1} ,x_{i2} ,x_{i3} ,...x_{in} ),
...,
f_{m}( x_{i1} ,x_{i2} ,x_{i3} ,...x_{in} ) \right \}
\]
即:構造\(\left ( f_{1},f_{2},f_{3},..f_{m} \right )\),以每一個\(f\)來映射\([x_{i1} ,x_{i2} ,x_{i3} ,...x_{in} ]\),從而得到m個\(f_{i}( x_{i1} ,x_{i2} ,x_{i3} ,...x_{in} )\),如果這裏的m<n,那麼同樣達到降維的目的,這種方式稱爲特徵提取,最後產生的每一個特徵都是全新的。
那麼明確一點,主成分分析(PCA)是屬於特徵提取。
二 主成分分析的理論推導
第一個主成分的推導
主成分分析的思想其實很簡單,困難在於理論證明。本質上主成分分析就是矩陣相乘的本質,矩陣相乘的本質就是把右邊矩陣的每一列投影到以左邊矩陣每一行爲基組的新的矩陣空間當中,如果左邊矩陣的行數小於右邊矩陣的行數,那麼以行來看就會實現降維。舉個列子:
\[
A_{3\times 5}\times B_{5\times 8}=C_{3\times 8}
\]
這樣簡單看\(B\)矩陣以行來看,就從5維降成了3維。ok,有了這個瞭解,我們再來看看主成分分析。
主成分分析在做這些事:構造\(A_{m\times n},b_{m\times 1}\),使\(Y_{m\times 1}=A_{m\times n}X_{n\times 1}+b_{m\times 1}\),m<n
這樣,我們就把\(X_{n\times 1}\)降維成了\(Y_{m\times 1}\)。
看起來還是很簡單是吧,隨便找個滿足上面降維的\((A\ b)\)就行了,但是我們不禁思考一個問題,我們這樣利用一個矩陣降維,會不會損失\(X\)所含有的信息呢?
答案是一定的,降維幾乎肯定是會損失信息,所以我們肯定不能隨便找組\((A\ b)\),我們需要的是降維後儘可能的保留\(X\)所含有的全部信息。但是問題來啦:
1、\(X\)的信息在哪裏?
2、用什麼來衡量?
3、如何找到能保留最多信息的\((A\ b)\)?
其實在統計學裏面 ,一個分佈的主要信息是方差或者標準差來衡量的,所以主成分分析要做的就是:
找到使投影后方差最大的方向,並向這個方向投影
舉個例子:
每個紅色點代表一個樣本\(x_{i}\),\(x_{i}=[x_{i1},x_{i2}]^{T}\)
即,每個樣本\(x_{i}\)是兩個維度,那麼如果要降維的話,只能降成1維。我這裏給出了兩個投影方向,a b ,在a方向上畫出了投影后的綠色點。那麼主成分分析認爲往a方向上投影更好。原因你可以這樣認爲,如果投影后的點越分散就越不容易出現重合點,重合的話一定造成信息完全損失。我們把往a投影后得到的稱爲第一個主成分,往b投影后得到的稱爲第二個主成分。而如何衡量‘分散’呢?就是方差!所以投影后的數據方差越大,那麼含有的信息就越多,損失的信息就越少。
ok,那我們來找最好的\((A\ b)\),但是呢,我們這裏先改寫一下:
\[
Y_{m\times 1}=A_{m\times n}(X_{n\times 1}-\overline{X_{n\times 1}})
\]
這樣只是把\(b_{m\times 1}\)變成了\(-A_{m\times n}\overline{X_{n\times 1}}\),只需要去求\(A_{m\times n}\)
首先呢,我們把\(A_{m\times n}\)寫出行向量的形式:
\[
A_{m\times n}=\begin{bmatrix}
a_{1}\\
a_{2}\\
...\\
a_{m}
\end{bmatrix}
\]
其中\(a_{i}=[a_{i1},a_{i2},a_{i3},...,a_{in}]\),每一個\(a_{i}\)表示一個投影方向。
此時:
\[
Y_{m\times 1}=
\begin{bmatrix}
a_{1}\\
a_{2}\\
...\\
a_{m}
\end{bmatrix}_{m\times n}
\times
(X_{n\times 1}-\overline{X_{n\times 1}})
=
\begin{bmatrix}
a_{1}(X_{n\times 1}-\overline{X_{n\times 1}})\\
a_{2}(X_{n\times 1}-\overline{X_{n\times 1}})\\
...\\
a_{m}(X_{n\times 1}-\overline{X_{n\times 1}})
\end{bmatrix}
\]
這裏我們假設一共有\(p\)個\(X\),即:\(\left \{ X_{i} \right \}_{i=1\sim p}\)
那麼同樣有:
\[
\left \{ Y_{i} \right \}_{m\times 1}
=
\begin{bmatrix}
a_{1}(\left \{ X_{i} \right \}_{n\times 1}-\overline{X_{n\times 1}})\\
a_{2}(\left \{ X_{i} \right \}_{n\times 1}-\overline{X_{n\times 1}})\\
...\\
a_{m}(\left \{ X_{i} \right \}_{n\times 1}-\overline{X_{n\times 1}}))
\end{bmatrix}
,i=1\sim p
\]
同樣的,這裏我們把上式寫成行向量的形式:
\[
\left \{ Y_{i} \right \}_{m\times 1}
=
\begin{bmatrix}
y_{i1}\\
y_{i2}\\
...\\
y_{im}
\end{bmatrix}
,i=1\sim p
\]
那麼現在呢,我們來回顧一下前面說的東西,每一個\(a_{i}\)代表着一個投影方向。
那麼既然:\(y_{i1}=a_{1}(\left \{ X_{i} \right \}_{n\times 1}-\overline{X_{n\times 1}})\)
那麼\(y_{i1}\)就代表着在第一個方向\(a_{1}\)上投影后的結果,稱之爲第一個主成分,我們需要的是投影后的結果的方差最大,即:
\[
max:\sum_{i=1}^{p}(y_{i1}-\overline{y}_{i1})^2
\]
那麼我們先來計算一下 \(\overline{y}_{i1}\)
\[
\overline{y}_{i1}=\frac{1}{p}\sum_{i=1}^py_{i1}
=\frac{1}{p}\sum_{i=1}^pa_{1}(\left \{ X_{i} \right \}_{n\times 1}-\overline{X_{n\times 1}})
=\frac{a_{1}}{p}[(\sum_{i=1}^p\left \{ X_{i} \right \}_{n\times 1})-p\overline{X_{n\times 1}}]
\]
而
\[
p\overline{X_{n\times 1}}=p*\frac{1}{p}\sum_{i=1}^p\left \{ X_{i} \right \}_{n\times 1}
=\sum_{i=1}^p\left \{ X_{i} \right \}_{n\times 1}
\]
所以
\[
\overline{y}_{i1}=\frac{1}{p}\sum_{i=1}^py_{i1}
=\frac{1}{p}\sum_{i=1}^pa_{1}(\left \{ X_{i} \right \}_{n\times 1}-\overline{X_{n\times 1}})
=\frac{a_{1}}{p}[(\sum_{i=1}^p\left \{ X_{i} \right \}_{n\times 1})-p\overline{X_{n\times 1}}]=0
\]
問題轉化爲:
\[
max:\sum_{i=1}^{p}y_{i1}^2=[a_{1}(\left \{ X_{i} \right \}_{n\times 1}-\overline{X_{n\times 1}})]^2
\]
這裏說明一下,\(a_{1}=(a_{11},a_{12},a_{13},...a_{1n})\),所以\(a_{1}(\left \{ X_{i} \right \}_{n\times 1}-\overline{X_{n\times 1}})\)是一個常數!
所以可以上式可以繼續改寫:(一個常數的轉置就等於本身,下面把右邊那個因式轉置一下)
\[
max:\sum_{i=1}^{p}y_{i1}^2=\sum_{i=1}^{p}a_{1}(\left \{ X_{i} \right \}_{n\times 1}-\overline{X_{n\times 1}})*[a_{1}(\left \{ X_{i} \right \}_{n\times 1}-\overline{X_{n\times 1}})]^{T}
\]
又根據 \((AB)^{T}=B^TA^T\), 把右邊的轉置因式展開:
\[
max:a_{1}[\sum_{i=1}^{p}(\left \{ X_{i} \right \}_{n\times 1}-\overline{X_{n\times 1}})
(\left \{ X_{i} \right \}_{n\times 1}-\overline{X_{n\times 1}})^{T}]a_{1}^{T}
\]
這整個式子最後的結果是一個常數!看下圖:
ok,那麼現在呢,我們用一個符號來代替中間那一部分!如下式:
\[
[\sum_{i=1}^{p}(\left \{ X_{i} \right \}_{n\times 1}-\overline{X_{n\times 1}})
(\left \{ X_{i} \right \}_{n\times 1}-\overline{X_{n\times 1}})^{T}]=\Sigma
\]
上面這個式子在統計學中就叫協方差矩陣( covariance matrix)
這裏再來補充一個知識點:\((A+B)^{T}=A^{T}+B^{T}\)
那麼來看看下面這個計算:
\[
\Sigma^{T}=[\sum_{i=1}^{p}(\left \{ X_{i} \right \}_{n\times 1}-\overline{X_{n\times 1}})(\left \{ X_{i} \right\}_{n\times 1}-\overline{X_{n\times 1}})^{T}]^{T}=\\
[\sum_{i=1}^{p}(\left \{ X_{i} \right \}_{n\times 1}-\overline{X_{n\times 1}})(\left \{ X_{i}\right\}_{n\times 1}-\overline{X_{n\times 1}})^{T}]=\Sigma
\]
這個我們下面會用到。
按理說這裏我們的優化問題已經求出來了,協方差矩陣是已經知道的,求\(a_{1}\),但是我們必須再對\(a_{i}\)進行一定的限制,爲什麼呢?我們說了這裏\(a_{i}\)是一個投影的方向,在數學的表達裏就是一個多維的向量,一個向量具有方向和模長。而我們主要關注的是方向,必須保證模長一定,所以我們必須對\(a_{i}\)進行一些歸一化限制。
於是我們給出下面完整的優化問題:
\[
最大化:a_{1}\Sigma a_{1}^{T}\\
限制條件:a_{1}a_{1}^{T}=\left | a_{1} \right |^{2}=1
\]
要解此優化問題要用到拉格朗日乘子法:
不瞭解的課參考下這篇文章看下:https://zhuanlan.zhihu.com/p/38625079
拉格朗日變換如下:
\[
F(a_{1})=a_{1}\Sigma a_{1}^{T}-\lambda (a_{1}a_{1}^{T}-1)
\]
對\(a_{1}\)求導:先給出一些求導的結果,矩陣求導比較陌生,不清楚的網上查一查。
\(\frac{\mathrm{d} (a_{1}\Sigma a_{1}^{T})}{\mathrm{d} a_{1}}=2(\Sigma a_{1}^{T})^{T},\ \ \ \frac{\mathrm{d} (a_{1}a_{1}^{T})}{\mathrm{d} a_{1}}=2a_{1}\)
所以求導後的結果是:
\[
\frac{\partial F}{\partial a_{1}}=2(\Sigma a_{1}^{T})^{T}-2\lambda a_{1}
\]
令其等於0:
\[
2(\Sigma a_{1}^{T})^{T}-2\lambda a_{1}=0\\
\Rightarrow (\Sigma a_{1}^{T})^{T}=\lambda a_{1}
\]
上式兩邊再同時轉置:注意\(\lambda\)是一個常數!
\[
\Sigma a_{1}^{T}=(\lambda a_{1})^{T}=\lambda a_{1}^{T}
\]
根據特徵值與特徵向量的定義,上式中:重點來了!
\(a_{1}^{T}\)是協方差矩陣\(\Sigma\)的特徵向量,\(\lambda\)是其對應的特徵值!
我們要最大化 \(a_{1}\Sigma a_{1}^{T}\\\),可作如下變換:
\[
a_{1}\Sigma a_{1}^{T}=a_{1}(\Sigma a_{1}^{T})=a_{1}\lambda a_{1}^{T}=\lambda(a_{1}a_{1}^{T})=\lambda
\]
那麼到此我們可以得出結論,我們要想最大化\(a_{1}\Sigma a_{1}^{T}\),就要最大化\(\lambda\)。而\(\lambda\)就是協方差矩陣\(\Sigma\)最大的特徵值,此時所求的\(a_{1}\)就是最大特徵值所對應的特徵向量。
此時求得的\(a_{1}\)就是使得方差最大化的方向,這時得到的第一個主成分就保留了最多的信息。
第二個主成分的推導
我們開始來求第二個主成分,也就是要求\(a_{2}\),但是\(a_{2}\)的限制條件除了歸一化限制以外,還要求\(a_{2}\)與\(a_{1}\)保持正定,你也可以認爲是垂直。
所以其完整優化問題就是如下:
\[
最大化:a_{2}\Sigma a_{2}^{T}\\
限制條件:a_{2}a_{2}^{T}=\left | a_{2} \right |^{2}=1\\
a_{2}a_{1}^{T}=a_{1}a_{2}^{T}=0 (a_{1} , a_{2}要正定)
\]
構造拉格朗日函數如下:
\[
F(a_{2})=a_{2}\Sigma a_{2}^{T}-\lambda (a_{2}a_{2}^{T}-1)-\beta a_{2}a_{1}^{T}
\]
其中:\(\frac{\mathrm{d} (a_{2}a_{1}^{T})}{\mathrm{d} a_{2}}=a_{1}\)
則原式對\(a_{2}\)求導結果如下:
\[
\frac{\mathrm{d} F}{\mathrm{d} a_{2}}=2(\Sigma a_{2}^{T})^{T}-2\lambda a_{2}-\beta a_{1}
\]
令上式等於0:
\[
2(\Sigma a_{2}^{T})^{T}-2\lambda a_{2}-\beta a_{1}=2a_{2}\Sigma ^{T}-2\lambda a_{2}-\beta a_{1}=0
\]
現在需要先證明\(\beta\)=0
這裏要用到我們前面所說的:\(\Sigma\)=\(\Sigma^{T}\),帶入上面的第二個等式,得到:
\[
2a_{2}\Sigma -2\lambda a_{2}-\beta a_{1}=0
\]
我們看看這個式子的結構:
現在上式兩邊同時乘以\(a_{1}^{T}\):
\[
(2a_{2}\Sigma -2\lambda a_{2}-\beta a_{1})a_{1}^{T}=0,這裏0是一個常數!
\]
化簡:
\[
(2a_{2}\Sigma-2\lambda a_{2}-\beta a_{1})a_{1}^{T}=0\\
\Rightarrow 2a_{2}\Sigma a_{1}^{T}-2\lambda a_{2}a_{1}^{T}-\beta a_{1}a_{1}^{T}=0\\
\Rightarrow 2a_{2}\lambda_{1}a_{1}^{T}-\beta =0\\
\Rightarrow \beta=2a_{2}\lambda_{1}a_{1}^{T}=0
\]
則:
\[
\frac{\mathrm{d} F}{\mathrm{d} a_{2}}=2(\Sigma a_{2}^{T})^{T}-2\lambda a_{2}=0\\
\Rightarrow (\Sigma a_{2}^{T})^{T}-\lambda a_{2}=0\\
\Rightarrow (\Sigma a_{2}^{T})^{T}=\lambda a_{2}\\
\Rightarrow \Sigma a_{2}^{T}=\lambda a_{2}^{T}
\]
同樣根據矩陣的特徵值與特徵向量的概念,可以推出\(a_{2}^{T}\)是協方差矩陣的特徵向量,\(\lambda\)是其對應的特徵值。
我們的目的是最大化:\(a_{2}\Sigma a_{2}^{T}\),同樣可根據以下變換:
\[
a_{2}\Sigma a_{2}^{T}=a_{2}(\Sigma a_{2}^{T})=a_{2}\lambda a_{2}^{T}=\lambda a_{2} a_{2}^{T}=\lambda
\]
也就是說,我要取一個最大的\(\lambda\),但是我們在第一個主成分裏已經取得了協方差矩陣\(\Sigma\)最大的特徵值,那我們這裏只能取第二大的特徵值,此時求得的投影方向就是第二大特徵值所對應的特徵向量。
數學歸納
前面通過推導,我們可以求出第一個主成分和第二個主成分,具體我們求多少個主成分,看自己需求,每一個的求法和前面都差不多,唯一的區別在於優化問題中,要新增限制條件,新求的\(a_{i}\)必須保持與之前求得的\((a_{i-1},a_{i-2},....)\)全部保持正定。這樣我們理論上就證明了如何通過協方差矩陣進行降維。
實際主成分分析(PCA降維算法)的算法流程
第一步:求協方差矩陣,
\[
\Sigma =\sum _{i=1}^{p}(X_{i}-\overline{X})(X_{i}-\overline{X})^{T}
\]
第二步:求出上面的協方差矩陣的特徵值,並按從大到小排列\((\lambda _{1},\lambda _{2},\lambda _{3},...)\)
對應的特徵向量排序爲\((a_{1}^{T},a_{2}^{T},a_{3}^{T},....)\)
第三步:歸一化所有\(a_{i}\),使得\(a_{i}a_{i}^{T}=1\)
第四步:選取前m(m<n)個特徵值所對應的特徵向量,求出降維矩陣\(A\)
\[
A=\begin{bmatrix}
a_{1}\\
a_{2}\\
...\\
a_{m}
\end{bmatrix}_{m\times n}
\]
第五步:降維
\[
Y_{m\times 1}=
\begin{bmatrix}
a_{1}\\
a_{2}\\
...\\
a_{m}
\end{bmatrix}_{m\times n}
\times
(X_{n\times 1}-\overline{X_{n\times 1}})
=
\begin{bmatrix}
a_{1}(X_{n\times 1}-\overline{X_{n\times 1}})\\
a_{2}(X_{n\times 1}-\overline{X_{n\times 1}})\\
...\\
a_{m}(X_{n\times 1}-\overline{X_{n\times 1}})
\end{bmatrix}
\]
這樣就把維度從\(n\times 1\)降成了\(m\times 1\)