1. 程式人生 > >機器學習---降維之PCA主成分分析法

機器學習---降維之PCA主成分分析法

(一)、主成分分析法PCA簡介

  • PCA 目的:降維——find a low dimension surface on which to project data ~
如圖所示,尋找藍色的點到直線的垂直距離的和最小的直線(向量)
 PCA 與 Linear Regression 的區別:  PCA衡量的是點到直線的垂直距離, 而linear regression是所有x點對應的真實值y=g(x)與估計值f(x)之間的vertical distance距離,如下圖所示:

(二)、PCA 演算法流程

假設有m個samples,每個資料有n維。 第一步:資料處理 首先要進行資料正則化,將點的各個features處理在相同的數量級。

 第二步:PCA演算法選取k個主分量 1. 求n×n的協方差矩陣Σ:
2. 根據SVD求取特徵值和特徵向量: [U,S,V] = SVD(Σ) singular value decomposition),在matlab中有函式[U,S,V] = svd(A) 返回一個與A同大小的對角矩陣S(由Σ的特徵值組成),兩個酉矩陣U和V,且滿足= U*S*V'。若A為m×n陣,則U為m×m陣,V為n×n陣。奇異值在S的對角線上,非負且按降序排列。 那麼對於方陣Σ呢,就有 Σ = USV'
ΣΣ' = USV'*VS'U' = U(ΣΣ')U' Σ'Σ = VS'U'*USV' = V(Σ'Σ)V'
i.e. U是ΣΣ'的特徵向量矩陣;V是Σ'Σ的特徵向量矩陣,都是n*n的矩陣 由於方陣的SVD相當於特徵值分解,所以事實上U = V, 即Σ = USU', U是特徵向量組成的正交矩陣(數值分析這門課中關於矩陣分解有相關介紹) 我們的目的是,從n維降維到k維,也就是選出這n個特徵中最重要的k個,也就是選出特徵值最大的k個~so...goto next step 3. 按特徵值從大到小排列,重新組織U 如果使用matlab的svd求得特徵值,就可以直接跳過這步了,因為該函式返回值中,奇異值在S的對角線上按照降序排列。否則的話應進行排序,並按照該次序找到對應的特徵向量重新排列。 4. 選擇k個分量
按照第五、六步中講的svd過後,我們得到了一個n×n的矩陣Σ和U,這時,我們就需要從U中選出k個最重要的分量;即選擇前k個特徵向量,即為Ureduce, 該矩陣大小為n×k

這樣對於一個n維向量x,就可以降維到k維向量z了:

=====================================

(三)、從壓縮資料中恢復原資料

我們已經知道,可以根據z(i) = Ureduce'× x(i) 將n維向量x降維到k維向量z,那麼有時我們需要恢復n維向量,怎麼做呢? 由於Ureduce是正交矩陣(下面Ureduce簡記為U),即U' = U-1, 所以 xapprox = (U')-1×z = (U-1)-1×z = Uz  (PS:這裡的逆操作為偽逆操作) 注意:這裡恢復出的xapprox並不是原先的x,而是向量x的近似值。(恢復後相當於將2D到1D時,將投影作為原先的點)

=====================================

(四)、怎樣決定降維個數/主成分個數


首先從一個general一點的思路去想呢,我們是希望,選出主成分之後進行資料分析,不會造成大量特徵的丟失,也就是說可以用下式的error ratio表示經過壓縮後的效能如何。 error ratio = 

然後呢,我們定義一個threshold(10% for example),如果error ratio<threshold,說明這樣選取主成分是可以接受的,else not 從數學上可以證明,上面這個error ratio 可以表示為 

所以,可以用下式進行k的合理選取:



(五)、應用PCA進行降維的建議

1. PCA可以降維,那讓我們聯想到了之前說過擬合問題是由維度過高或者引數過多造成的,那麼可不可以用PCA解決overfitting的問題呢?

Ans:NO!應用PCA提取主成分可能會解決一些overfitting的問題,但是呢,不建議用這種方法解決overfitting問題,還是建議用第三章中講過的加入regularization項(也稱為ridge regression)來解決。畢竟,PCA降維過程中是丟棄了某些特徵,存在資料損失。


2. PCA中主成分分析應用到那部分資料呢?

Ans:Only Training Data!可以用Cross-Validation data 和 test Data進行檢驗,但是選擇主分量的時候只應用training data.


3. 不要盲目PCA

Notice:只有當你在源資料上處理結果不理想時,可以考慮用PCA處理。


參考:http://blog.csdn.net/abcjennifer/article/details/8002329