原文鏈接 從高數原理推導出的PCA降維
【機器學習】降維-PCA
PCA(Principal Component Analysis) 是一種常見的數據分析方式,常用於高維數據的降維,可用於提取數據的主要特征分量。
PCA 的數學推導可以從最大可分型和最近重構性兩方面進行,前者的優化條件為划分后方差最大,后者的優化條件為點到划分平面距離最小,這里我將從最大可分性的角度進行證明。
1. 向量表示與基變換
我們先來介紹些線性代數的基本知識。
1.1 內積
兩個向量的 A 和 B 內積我們知道形式是這樣的:
內積運算將兩個向量映射為實數,其計算方式非常容易理解,但我們無法看出其物理含義。接下來我們從幾何角度來分析,為了簡單起見,我們假設 A 和 B 均為二維向量,則:
其幾何表示見下圖:
我們看出 A 與 B 的內積等於 A 到 B 的投影長度乘以 B 的模。
如果假設 B 的模為 1,即讓 ,那么就變成了:
也就是說,A 與 B 的內積值等於 A 向 B 所在直線投影的表量長度。
這就是內積的一種幾何解釋,也是我們得到的第一個重要結論。在后面的推導中,將反復使用這個結論。
1.2 基
在我們常說的坐標系種,向量 (3,2) 其實隱式引入了一個定義:以 x 軸和 y 軸上正方向長度為 1 的向量為標准。向量 (3,2) 實際是說在 x 軸投影為 3 而 y 軸的投影為 2。注意投影是一個標量,所以可以為負。
所以,對於向量 (3, 2) 來說,如果我們想求它在 這組基下的坐標話,分別內積即可。當然,內積完了還是 (3, 2)。
所以,我們大致可以得到一個結論,我們要准確描述向量,首先要確定一組基,然后給出在基所在的各個直線上的投影值,就可以了。為了方便求坐標,我們希望這組基向量模長為 1。因為向量的內積運算,當模長為 1 時,內積可以直接表示投影。然后還需要這組基是線性無關的,我們一般用正交基,非正交的基也是可以的,不過正交基有較好的性質。
1.3 基變換的矩陣表示
這里我們先做一個練習:對於向量 (3,2) 這個點來說,在 和
這組基下的坐標是多少?
我們拿 (3,2) 分別與之內積,得到 這個新坐標。
我們可以用矩陣相乘的形式簡潔的表示這個變換:
左邊矩陣的兩行分別為兩個基,乘以原向量,其結果剛好為新基的坐標。推廣一下,如果我們有 m 個二維向量,只要將二維向量按列排成一個兩行 m 列矩陣,然后用“基矩陣”乘以這個矩陣就可以得到了所有這些向量在新基下的值。例如對於數據點 來說,想變換到剛才那組基上,則可以這樣表示:
我們可以把它寫成通用的表示形式:
其中 是一個行向量,表示第 i 個基,
是一個列向量,表示第 j 個原始數據記錄。實際上也就是做了一個向量矩陣化的操作。
上述分析給矩陣相乘找到了一種物理解釋:兩個矩陣相乘的意義是將右邊矩陣中的每一列向量 變換到左邊矩陣中以每一行行向量為基所表示的空間中去。也就是說一個矩陣可以表示一種線性變換。
2. 最大可分性
上面我們討論了選擇不同的基可以對同樣一組數據給出不同的表示,如果基的數量少於向量本身的維數,則可以達到降維的效果。
但是我們還沒回答一個最關鍵的問題:如何選擇基才是最優的。或者說,如果我們有一組 N 維向量,現在要將其降到 K 維(K 小於 N),那么我們應該如何選擇 K 個基才能最大程度保留原有的信息?
一種直觀的看法是:希望投影后的投影值盡可能分散,因為如果重疊就會有樣本消失。當然這個也可以從熵的角度進行理解,熵越大所含信息越多。
2.1 方差
我們知道數值的分散程度,可以用數學上的方差來表述。一個變量的方差可以看做是每個元素與變量均值的差的平方和的均值,即:
為了方便處理,我們將每個變量的均值都化為 0 ,因此方差可以直接用每個元素的平方和除以元素個數表示:
於是上面的問題被形式化表述為:尋找一個一維基,使得所有數據變換為這個基上的坐標表示后,方差值最大。
2.2 協方差
在一維空間中我們可以用方差來表示數據的分散程度。而對於高維數據,我們用協方差進行約束,協方差可以表示兩個變量的相關性。為了讓兩個變量盡可能表示更多的原始信息,我們希望它們之間不存在線性相關性,因為相關性意味着兩個變量不是完全獨立,必然存在重復表示的信息。
協方差公式為:
由於均值為 0,所以我們的協方差公式可以表示為:
當樣本數較大時,不必在意其是 m 還是 m-1,為了方便計算,我們分母取 m。
當協方差為 0 時,表示兩個變量完全獨立。為了讓協方差為 0,我們選擇第二個基時只能在與第一個基正交的方向上進行選擇,因此最終選擇的兩個方向一定是正交的。
至此,我們得到了降維問題的優化目標:將一組 N 維向量降為 K 維,其目標是選擇 K 個單位正交基,使得原始數據變換到這組基上后,各變量兩兩間協方差為 0,而變量方差則盡可能大(在正交的約束下,取最大的 K 個方差)。
2.3 協方差矩陣
針對我們給出的優化目標,接下來我們將從數學的角度來給出優化目標。
我們看到,最終要達到的目的與變量內方差及變量間協方差有密切關系。因此我們希望能將兩者統一表示,仔細觀察發現,兩者均可以表示為內積的形式,而內積又與矩陣相乘密切相關。於是我們有:
假設我們只有 a 和 b 兩個變量,那么我們將它們按行組成矩陣 X:
然后:
我們可以看到這個矩陣對角線上的分別是兩個變量的方差,而其它元素是 a 和 b 的協方差。兩者被統一到了一個矩陣里。
我們很容易被推廣到一般情況:
設我們有 m 個 n 維數據記錄,將其排列成矩陣 ,設
,則 C 是一個對稱矩陣,其對角線分別對應各個變量的方差,而第 i 行 j 列和 j 行 i 列元素相同,表示 i 和 j 兩個變量的協方差。
2.4 矩陣對角化
根據我們的優化條件,我們需要將除對角線外的其它元素化為 0,並且在對角線上將元素按大小從上到下排列(變量方差盡可能大),這樣我們就達到了優化目的。這樣說可能還不是很明晰,我們進一步看下原矩陣與基變換后矩陣協方差矩陣的關系。
設原始數據矩陣 X 對應的協方差矩陣為 C,而 P 是一組基按行組成的矩陣,設 Y=PX,則 Y 為 X 對 P 做基變換后的數據。設 Y 的協方差矩陣為 D,我們推導一下 D 與 C 的關系:
這樣我們就看清楚了,我們要找的 P 是能讓原始協方差矩陣對角化的 P。換句話說,優化目標變成了尋找一個矩陣 P,滿足 是一個對角矩陣,並且對角元素按從大到小依次排列,那么 P 的前 K 行就是要尋找的基,用 P 的前 K 行組成的矩陣乘以 X 就使得 X 從 N 維降到了 K 維並滿足上述優化條件。
至此,我們離 PCA 還有僅一步之遙,我們還需要完成對角化。
由上文知道,協方差矩陣 C 是一個是對稱矩陣,在線性代數中實對稱矩陣有一系列非常好的性質:
-
- 實對稱矩陣不同特征值對應的特征向量必然正交。
- 設特征向量
重數為 r,則必然存在 r 個線性無關的特征向量對應於
,因此可以將這 r 個特征向量單位正交化。
由上面兩條可知,一個 n 行 n 列的實對稱矩陣一定可以找到 n 個單位正交特征向量,設這 n 個特征向量為 ,我們將其按列組成矩陣:
。
則對協方差矩陣 C 有如下結論:
其中 為對角矩陣,其對角元素為各特征向量對應的特征值(可能有重復)。
到這里,我們發現我們已經找到了需要的矩陣 P: 。
P 是協方差矩陣的特征向量單位化后按行排列出的矩陣,其中每一行都是 C 的一個特征向量。如果設 P 按照 中特征值的從大到小,將特征向量從上到下排列,則用 P 的前 K 行組成的矩陣乘以原始數據矩陣 X,就得到了我們需要的降維后的數據矩陣 Y。
2.5 補充
(1) 拉格朗日乘子法
在敘述求協方差矩陣對角化時,我們給出希望變化后的變量有:變量間協方差為 0 且變量內方差盡可能大。然后我們通過實對稱矩陣的性質給予了推導,此外我們還可以把它轉換為最優化問題利用拉格朗日乘子法來給予推導。
我們知道樣本點 在基 w 下的坐標為:
,於是我們有方差:
我們看到 就是原樣本的協方差,我們另這個矩陣為
,於是我們有:
.
然后構造拉格朗日函數:
對 w 求導:
此時我們的方差為:
於是我們發現,x 投影后的方差就是協方差矩陣的特征值。我們要找到最大方差也就是協方差矩陣最大的特征值,最佳投影方向就是最大特征值所對應的特征向量,次佳就是第二大特征值對應的特征向量,以此類推。
至此我們完成了基於最大可分性的 PCA 數學證明
(2) 最近重構性
以上的證明思路主要是基於最大可分性的思想,通過一條直線使得樣本點投影到該直線上的方差最大。除此之外,我們還可以將其轉換為線型回歸問題,其目標是求解一個線性函數使得對應直線能夠更好地擬合樣本點集合。這就使得我們的優化目標從方差最大轉化為平方誤差最小,因為映射距離越短,丟失的信息也會越小。區別於最大可分性,這是從最近重構性的角度進行論證。
3. 求解步驟
總結一下 PCA 的算法步驟:
設有 m 條 n 維數據。
-
- 將原始數據按列組成 n 行 m 列矩陣 X;
- 將 X 的每一行進行零均值化,即減去這一行的均值;
- 求出協方差矩陣
;
- 求出協方差矩陣的特征值及對應的特征向量;
- 將特征向量按對應特征值大小從上到下按行排列成矩陣,取前 k 行組成矩陣 P;
即為降維到 k 維后的數據。
4. 性質
-
- 緩解維度災難:PCA 算法通過舍去一部分信息之后能使得樣本的采樣密度增大(因為維數降低了),這是緩解維度災難的重要手段;
- 降噪:當數據受到噪聲影響時,最小特征值對應的特征向量往往與噪聲有關,將它們舍棄能在一定程度上起到降噪的效果;
- 過擬合:PCA 保留了主要信息,但這個主要信息只是針對訓練集的,而且這個主要信息未必是重要信息。有可能舍棄了一些看似無用的信息,但是這些看似無用的信息恰好是重要信息,只是在訓練集上沒有很大的表現,所以 PCA 也可能加劇了過擬合;
- 特征獨立:PCA 不僅將數據壓縮到低維,它也使得降維之后的數據各特征相互獨立;
5. 細節
5.1 零均值化
當對訓練集進行 PCA 降維時,也需要對驗證集、測試集執行同樣的降維。而對驗證集、測試集執行零均值化操作時,均值必須從訓練集計算而來,不能使用驗證集或者測試集的中心向量。
其原因也很簡單,因為我們的訓練集時可觀測到的數據,測試集不可觀測所以不會知道其均值,而驗證集再大部分情況下是在處理完數據后再從訓練集中分離出來,一般不會單獨處理。如果真的是單獨處理了,不能獨自求均值的原因是和測試集一樣。
另外我們也需要保證一致性,我們拿訓練集訓練出來的模型用來預測測試集的前提假設就是兩者是獨立同分布的,如果不能保證一致性的話,會出現 Variance Shift 的問題。
5.2 與 SVD 的對比
這是兩個不同的數學定義。我們先給結論:特征值和特征向量是針對方陣才有的,而對任意形狀的矩陣都可以做奇異值分解。
PCA:方陣的特征值分解,對於一個方針 A,總可以寫成: 。
其中,Q 是這個矩陣 A 的特征向量組成的矩陣, 是一個對角矩陣,每一個對角線元素就是一個特征值,里面的特征值是由小排列的,這些特征值所對應的特征向量就是描述這個矩陣變化方向(從主要的變化到次要的變化排列)。也就是說矩陣 A 的信息可以由其特征值和特征向量表示。
SVD:矩陣的奇異值分解其實就是對於矩陣 A 的協方差矩陣 和
做特征值分解推導出來的:
其中:U V 都是正交矩陣,有 。這里的約等於是因為
中有 n 個奇異值,但是由於排在后面的很多接近 0,所以我們可以僅保留比較大的 k 個奇異值。
所以,V U 兩個矩陣分別是 和
的特征向量,中間的矩陣對角線的元素是
和
的特征值。我們也很容易看出 A 的奇異值和
的特征值之間的關系。
PCA 需要對協方差矩陣 。進行特征值分解; SVD 也是對
進行特征值分解。如果取
則兩者基本等價。所以 PCA 問題可以轉換成 SVD 求解。
而實際上 Sklearn 的 PCA 就是用 SVD 進行求解的,原因有以下幾點:
-
- 當樣本維度很高時,協方差矩陣計算太慢;
- 方針特征值分解計算效率不高;
- SVD 出了特征值分解這種求解方式外,還有更高效更准球的迭代求解方式,避免了
的計算;
- 其實 PCA 與 SVD 的右奇異向量的壓縮效果相同。