【轉載】主成分分析法(PCA)

https://www.jisilu.cn/question/252942算法

進行維數約減(Dimensionality Reduction),目前最經常使用的算法是主成分分析法 (Principal Componet Analysis, PCA)

使用主成分分析法進行數據的降維處理,具體的原理和過程是怎麼樣的呢?

下面讓我一一道來。
app

1 信息損失最少

例如這樣一些二維數據:



咱們想要將數據降到一維,究竟是圖中的紅線好呢仍是綠線好呢?



降維就意味着信息的丟失,咱們須要作的,就是儘量將這樣的信息損失下降。





咱們能夠很直觀地看到,數據點和直線的距離就在降維的過程當中丟失掉了。

顯然,綠線丟失的數據要比紅線多。

因此,咱們能夠判斷,使用紅線相比綠線會更好。

咱們也注意到,投影到紅線上的藍點,離散的程度大於投影到綠線上的藍點,這也從另外一個角度說明投影到紅線丟失的信息相對更少。

這個離散的程度,咱們使用藍點之間的方差進行衡量:



其中:



爲了方便計算,咱們將全部的特徵都減去該特徵的均值,並依然用 a<sub>i</sub> 來表示,因此藍點之間的方差能夠記爲:


測試

2 特徵不相關

上面是二維降爲一維的狀況,只須要找到使得方差最大化的一個向量就能夠了:



可是對於更高的維度,應該如何處理呢?例如三維降爲二維。

固然咱們能夠首先找到一個使得投影方差最大方向,而後在這個基礎上,找到和這個方向不相關的另一個使得投影方差最大的方向。

所謂的不相關,就是指第二個方向向量和第一個方向向量正交,體如今二維平面上就是垂直的關係:



咱們先找到了使得投影方差最大方向,其方向向量爲 u<sup>(1)</sup> ,而後找到了和它垂直的投影方差最大的方向,其方向向量爲 u<sup>(2)</sup> 。

這裏兩個方向的相關程度,咱們使用協方差進行衡量:



這裏的 a, b 均已減去特徵的均值。

當協方差 Cov(a,b) = 0 的時候,兩個特徵向量正交,也就是兩個特徵不相關。
3d

3 PCA的推導過程

假設咱們的訓練數據有 m 行數據,有 n 個特徵維度,那麼矩陣 X 是一個 m × n 的矩陣,能夠表達爲:



X 的協方差矩陣 C 能夠經過如下公式獲得:



那麼 C 爲一個 n × n 的矩陣:



能夠直觀地看到,協方差矩陣 C 是一個對稱矩陣,C<sub>ij</sub> = C<sub>ji</sub> ,對角線是各個特徵的方差。

由於矩陣 C 是一個實對稱矩陣,因此 C 也具有一些實對稱矩陣的特徵:
blog

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 。其中計算的公式爲:



至此咱們算是完成了降維。
ip

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 。
ci

6 關於PCA的注意事項

注意一:若是使用了PCA對訓練集的數據進行了處理,那麼對於驗證集和測試集也須要進行相對應的處理。

咱們在處理訓練集的過程當中獲得了特徵的均值 μ 和方差 σ ,以及特徵向量 U ,咱們須要使用這些參數先對數據進行歸一化處理,而後轉換到新的特徵空間。

注意二:在使用PCA進行壓縮以前,先使用原數據進行訓練,這樣咱們才能對比壓縮先後的效果。

若是不是佔用內存空間太大,或者算法運行速度過慢,其實沒有必要進行壓縮。

注意三:不要使用PCA來避免過分擬合。

由於經過這樣的方式皮避免度擬合,不只效果不好,而且會丟失部分數據。it

相關文章
相關標籤/搜索