【轉載】主成分分析法(PCA)
https://www.jisilu.cn/question/252942
進行維數約減(Dimensionality Reduction),目前最常用的算法是主成分分析法 (Principal Componet Analysis, PCA)。
使用主成分分析法進行數據的降維處理,具體的原理和過程是怎麽樣的呢?
下面讓我一一道來。
1 信息損失最少
例如這樣一些二維數據:
我們想要將數據降到一維,到底是圖中的紅線好呢還是綠線好呢?
降維就意味著信息的丟失,我們需要做的,就是盡可能將這樣的信息損失降低。
我們可以很直觀地看到,數據點和直線的距離就在降維的過程中丟失掉了。
顯然,綠線丟失的數據要比紅線多。
所以,我們可以判斷,使用紅線相比綠線會更好。
我們也註意到,投影到紅線上的藍點,離散的程度大於投影到綠線上的藍點,這也從另一個角度說明投影到紅線丟失的信息相對更少。
這個離散的程度,我們使用藍點之間的方差進行衡量:
其中:
為了方便計算,我們將所有的特征都減去該特征的均值,並依然用 a<sub>i</sub> 來表示,所以藍點之間的方差可以記為:
2 特征不相關
上面是二維降為一維的情況,只需要找到使得方差最大化的一個向量就可以了:
但是對於更高的維度,應該如何處理呢?例如三維降為二維。
當然我們可以首先找到一個使得投影方差最大方向,然後在這個基礎上,找到和這個方向不相關的另外一個使得投影方差最大的方向。
所謂的不相關,就是指第二個方向向量和第一個方向向量正交,體現在二維平面上就是垂直的關系:
我們先找到了使得投影方差最大方向,其方向向量為 u<sup>(1)</sup> ,然後找到了和它垂直的投影方差最大的方向,其方向向量為 u<sup>(2)</sup> 。
這裏兩個方向的相關程度,我們使用協方差進行衡量:
這裏的 a, b 均已減去特征的均值。
當協方差 Cov(a,b) = 0 的時候,兩個特征向量正交,也就是兩個特征不相關。
3 PCA的推導過程
假設我們的訓練數據有 m 行數據,有 n 個特征維度,那麽矩陣 X 是一個 m × n 的矩陣,可以表達為:
X 的協方差矩陣 C 可以通過以下公式得到:
那麽 C 為一個 n × n 的矩陣:
可以直觀地看到,協方差矩陣 C 是一個對稱矩陣,C<sub>ij</sub> = C<sub>ji</sub> ,對角線是各個特征的方差。
因為矩陣 C 是一個實對稱矩陣,所以 C 也具備一些實對稱矩陣的特征:
C 的不同特征值對應的特征向量是正交的;
C 的特征值都是實數,特征向量都是實向量;
C 可對角化,且相似對角陣上的元素即為矩陣本身特征值。
根據這些性質,我們可以得到 n 個線性無關的非零特征向量 e<sub>1</sub>, e<sub>2</sub>, … , e<sub>n</sub> ,這些特征向量構成的特征矩陣 E = ( e<sub>1</sub> e<sub>2</sub> … e<sub>n</sub> ) 滿足:
Λ 是一個對角矩陣,除了對角線有值,其他位置(空白處)都是 0 。
對於特征矩陣 X ,因為可能存在大量的冗余數據,我們將它轉換到另外一個特征空間,得到新的特征矩陣 Z:
我們希望這個特征空間中各個特征的彼此是線性無關的,也就是說希望各個特征向量是正交關系。
那麽在新的特征空間中,其協方差矩陣應該是一個對角矩陣:
對角線是方差,其他位置(空白處)是協方差。協方差為 0 ,代表著兩個向量正交。
假設特征空間轉換的過程可以表達為 Z = XU ,矩陣 D 代入該表達式可以得到:
也就是說 U = E ,U 就是矩陣 C 特征向量所組成的矩陣。矩陣 D 對角線上每個值就是矩陣 C 的特征值。
如果我們把 D 中的特征值按照從大到小,將特征向量從左到右進行排序,然後取其中前 k 個,經過壓縮轉換(Z = XU),就得到了我們降維之後的數據矩陣 Z :
X 是 m × n 的矩陣, U 是 n × k 的矩陣,Z 是 m × k 的矩陣。
4 PCA的計算過程
第一步:首先對特征進行歸一化處理。
第二步:計算協方差矩陣。
第三步:計算協方差矩陣的特征向量並按照特征大從大到小排序。
第四步:提取特征向量矩陣的前 k 列。
第五步:通過矩陣乘法計算得到新的特征 Z 。其中計算的公式為:
至此我們算是完成了降維。
5 特征數 k 的選擇
不過有時候,降維的效果可能並不好。要麽可能維度壓縮不多,內存占用和計算速度依然沒有改善,要麽可能維度壓縮太過,信息丟失太大。
這其實取決於特征數 k 的選擇。
因為矩陣 U 中每個特征向量是相互正交的,矩陣 U 也是一個正交矩陣,所以有 UU<sup>T</sup> = E , E 為單位矩陣。
經過如下推導,我們可以反壓縮得到矩陣 X:
因為保留的特征數 k 小於 m,所以這個反壓縮得到的結果是不等於 X 的。
例如一維還原到二維,最終反壓縮得到的結果是:
而不是:
這是因為特征轉換的過程中,丟失了一部分的信息。
所以使用 X<sub>approx</sub> 進行標記更加合適:
有了 X<sub>approx</sub> ,其實我們就能計算信息丟失率:
如果損失小於 1%,那麽我們可以說保留了 99% 的差異性。
當然,差異性的百分比還有另外一個獲得,那就是前 k 個特征值之和除以所有的特征值之和。
因為我們已經對特征值進行了降序排序,所以前面 k 個特征應該能夠比較好的代表全部的特征。
註意,這個特征值是指對角矩陣對角線上的數值:
如果對於每個特征值,我們使用 S<sub>ii</sub> 進行標記,那麽公式就是:
大於 k 小於 m 部分的特征值,就是丟失的數據,所以信息丟失率也可以通過下面的公式計算:
我們需要做的,是設置一個差異性保留的百分比,然後從小到大對 k 進行遍歷,差異性滿足條件,k 就是我們要的結果。
例如計算得到的數據差異性百分比和 k 的關系如下:
k = 1 :60%
k = 2 :77%
k = 3 :88%
k = 4 :93%
k = 5 :97%
k = 6 :99%
如果我們要保留 90% 的數據,那麽 k 的取值應該是 4 ;
如果我們要保留 99% 的數據,那麽 k 的取值應該是 6 。
6 關於PCA的註意事項
註意一:如果使用了PCA對訓練集的數據進行了處理,那麽對於驗證集和測試集也需要進行相對應的處理。
我們在處理訓練集的過程中得到了特征的均值 μ 和方差 σ ,以及特征向量 U ,我們需要使用這些參數先對數據進行歸一化處理,然後轉換到新的特征空間。
註意二:在使用PCA進行壓縮之前,先使用原數據進行訓練,這樣我們才能對比壓縮前後的效果。
如果不是占用內存空間太大,或者算法運行速度過慢,其實沒有必要進行壓縮。
註意三:不要使用PCA來避免過度擬合。
因為通過這樣的方式皮避免度擬合,不僅效果很差,並且會丟失部分數據。
【轉載】主成分分析法(PCA)