github:PCA代碼實現、PCA應用
本文算法均使用python3實現
1. 數據降維
在實際生產生活中,我們所獲得的數據集在特征上往往具有很高的維度,對高維度的數據進行處理時消耗的時間很大,並且過多的特征變量也會妨礙查找規律的建立。如何在最大程度上保留數據集的信息量的前提下進行數據維度的降低,是我們需要解決的問題。
對數據進行降維有以下優點:
(1)使得數據集更易使用
(2)降低很多算法的計算開銷
(3)去除噪聲
(4)使得結果易懂
降維技術作為數據預處理的一部分,即可使用在監督學習中也能夠使用在非監督學習中。而降維技術主要有以下幾種:主成分分析(Principal Component Analysis,PCA)、因子分析(Factor Analysis),以及獨立成分分析(Independent Component Analysis, ICA)。其中主成分分析PCA應用最為廣泛,本文也將詳細介紹PCA。
2. 主成分分析(PCA)
我們利用一個例子來理解PCA如何進行降維的。
參考下圖,對於樣本數據 $ D=\lbrace x^{(1)},x^{(2)},...,x^{(m)} \rbrace$ ,其中 $ x^{(i)} = [ x^{(i)}_1 , x^{(i)}_2]^T $
假設對於原樣本中,位於第一象限的三個樣本點屬於類別“A”,位於第三象限的兩個樣本點屬於類別“B”。經過投影后,我們可以看出,對於第一種降維,在降維后仍舊保持了位於原點右側的三個樣本屬於類別“A”,位於原點左側的兩個樣本屬於類別“B”。而對於第二種投影,明顯可以看出,已經不能夠分辨出樣本的類別了。換句話說,第二種投影方式丟失了一些信息。
因此,“投影誤差和最小”便成為我們所需要優化的目標。
那么如何尋找投影誤差最小的方向呢?
尋找到方差最大的方向即可。方差最大與投影誤差最小這兩個優化目標其實本質上是一樣的,具體可參考周志華著《機器學習》一書,書中證明了最大可分性(誤差最大)與最近重構性(投影和最小)兩種優化等價。
到此我們就對PCA的降維方式已經有了初步的理解。
3. PCA算法思路與要點
3.1 PCA算法思路
PCA的算法思路主要是:數據從原來的坐標系轉換到新的坐標系,由數據本身決定。轉換坐標系時,以方差最大的方向作為坐標軸方向,因為數據的最大方差給出了數據的最重要的信息。第一個新坐標軸選擇的是原始數據中方差最大的方向,第二個新坐標軸選擇的是與第一個新坐標軸正交且方差次大的方向。重復該過程,重復次數為原始數據的特征維數。
通過這種方式獲得的新的坐標系,我們發現,大部分方差都包含在前面幾個坐標軸中,后面的坐標軸所含的方差幾乎為0。於是,我們可以忽略余下的坐標軸,只保留前面的幾個含有絕大部分方差的坐標軸。事實上,這樣也就相當於只保留包含絕大部分方差的維度特征,而忽略包含方差幾乎為0的特征維度,也就實現了對數據特征的降維處理。
3.2 PCA算法要點
根據以上PCA算法思路的描述,我們大概可以看出,對於PCA算法,其要點主要是如何找到方差最大的方向。
這里將提到有關線性代數里的一些內容:
(1)協方差矩陣
(1.1)特征 $ X_i $ 與特征 $ X_j $ 的協方差(Covariance): $$ Cov(X_i, X_j) = \frac{\sum_{k=1}^n(X_i^{(k)} - \overline{X}_i)(X_j^{(k)}-\overline{X}_j)}{n-1} $$
其中 $ X_i^{(k)}, X_j^{(k)} $ 表示特征 $ X_i.X_j $ 的第 $ k $ 個樣本中的取值。而 $ \overline{X}_i,\overline{X}_j $ 則是表示兩個特征的樣本均值。
可以看出,當 $ X_i = X_j $ 時,協方差即為方差。
(1.2)對於一個只有兩個特征的樣本來說,其協方差矩陣為: $$ C = \begin{bmatrix} Cov(X_1,X_1) & Cov(X_1,X_2) \ Cov(X_2,X_1) & Cov(X_2,X_2) \ \end{bmatrix} $$
當特征數為 $ n $ 時,協方差矩陣為 $ n \times n $ 維的矩陣,且對角線為各特征的方差值。
(2)特征向量與特征值
對於矩陣 $ A $ ,若滿足 $ A \zeta = \lambda \zeta $ ,則稱 $ \zeta $ 是矩陣 $ A $ 的特征向量,而 $ \lambda $ 則是矩陣 $ A $ 的特征值。將特征值按照從大到小的順序進行排序,選擇前 $ k $ 個特征值所對應的特征向量即為所求投影向量。
對於特征值與特征向量的求解,主要是:特征值分解(當 $ A $ 為方陣時),奇異值SVD分解(當 $ A $ 不為方陣時)
4. PCA算法過程
輸入:訓練樣本集 $ D ={x^{(1)},x^{(2)},...,x^{(m)}} $ ,低維空間維數 $ d' $ ;
過程:.
1:對所有樣本進行中心化(去均值操作): $ x_j^{(i)} \leftarrow x_j^{(i)} - \frac{1}{m} \sum_{i=1}^m x_j^{(i)} $ ;
2:計算樣本的協方差矩陣 $ XX^T $ ;
3:對協方差矩陣 $ XX^T $ 做特征值分解 ;
4:取最大的 $ d' $ 個特征值所對應的特征向量 $ w_1,w_2,...,w_{d'} $
5:將原樣本矩陣與投影矩陣相乘: $ X \cdot W $ 即為降維后數據集 $ X' $ 。其中 $ X $ 為 $ m \times n $ 維, $ W = [w_1,w_2,...,w_{d'}] $ 為 $ n \times d' $ 維。
5:輸出:降維后的數據集 $ X' $
5. PCA算法分析
優點:使得數據更易使用,並且可以去除數據中的噪聲,使得其他機器學習任務更加精確。該算法往往作為預處理步驟,在數據應用到其他算法之前清洗數據。
缺點:數據維度降低並不代表特征的減少,因為降維仍舊保留了較大的信息量,對結果過擬合問題並沒有幫助。不能將降維算法當做解決過擬合問題方法。如果原始數據特征維度並不是很大,也並不需要進行降維。
引用及參考:
[1]《機器學習》周志華著
[2]《機器學習實戰》Peter Harrington著
[3] https://www.cnblogs.com/zy230530/p/7074215.html
[4] http://www.cnblogs.com/zhangchaoyang/articles/2222048.html
[5] https://www.cnblogs.com/terencezhou/p/6235974.html
寫在最后:本文參考以上資料進行整合與總結,屬於原創,文章中可能出現理解不當的地方,若有所見解或異議可在下方評論,謝謝!
若需轉載請注明:https://www.cnblogs.com/lliuye/p/9156763.html
