降維(一) PCA
為什麼需要降維?
如果我們希望模型的精度比較高,或者說泛化誤差率較小,那麼我們希樣本的取樣密度足夠大(密取樣
),即在任意樣本附近任意小的距離範圍內總能找到一個樣本。
假設所有樣本在其屬性上歸一化,對於,僅考慮單個屬性,需要1000個樣本點平均分佈在其取值範圍內,可以保證所有樣本在其附近0.001範圍內總能找到一個訓練樣本。但是,維數增大時,假定屬性維數為20,若要滿足密取樣的要求,則至少需個樣本。
事實上,在高維情形下出現的樣本稀疏
、距離計算困難
等問題,是所有機器學習方法面臨的嚴重障礙,被稱為“維數災難
緩解維數災難的一個重要途徑就是降維:
-
通過某種
數學變換
將原始高維
屬性空間轉變
為一個低維
“子空間”,在這個子空間中樣本密度大幅提高,距離計算也變得更為容易。 -
但是要保證原始空間中樣本之間的
距離
在低維空間中得以保持
,且在低維子空間中更容易學習
。
常用的降維方法有兩種:PCA、LDA。
這裡先總結PCA的思想和過程:
主成分分析(PCA)
主成分分析(Principal components analysis,簡稱PCA)是最重要的降維方法之一,在資料壓縮消除冗餘和資料噪音消除等領域都有廣泛的應用。
1、思想
PCA中主成分的意思就是找出資料裡最主要的方面,用資料裡最主要的方面來代替原始資料。具體的,假如我們的資料集是維的,共有個數據。我們希望將這個數據的維度從維降到維,希望這個維的資料集儘可能的代表原始資料集。我們知道資料從維降到維肯定會有損失,但是我們希望損失儘可能的小。那麼如何讓這維的資料儘可能表示原來的資料呢?
我們先看看最簡單的情況,也就是n=2,n’=1,也就是將資料從二維降維到一維。資料如下圖。我們希望找到某一個維度方向,它可以代表這兩個維度的資料。圖中列了兩個向量方向,u1和u2,那麼哪個向量可以更好的代表原始資料集呢?從直觀上也可以看出,u1比u2好。
為什麼u1比u2好呢?可以有兩種解釋,第一種解釋是樣本點到這個直線的距離足夠近,第二種解釋是樣本點在這個直線上的投影能儘可能的分開。
假如我們把n’從1維推廣到任意維,則我們的希望降維的標準為:
- 樣本點到這個超平面的距離足夠近;
- 樣本點在這個超平面上的投影能儘可能的分開(方差最大)。
2、原理
通過上面的分析可以從兩方面推導出如下結果: 或者: 因此將問題轉化為有約束的最優化問題,於是可以採用拉格朗日乘數法,得到: 對求導有,得到: 即:
由上式可以知道當取最大值時可以使達到最大值。
因此,當我們將資料集從維降到維時,需要找到最大的個特徵值對應的特徵向量。這個特徵向量組成的矩陣即為我們需要的矩陣。對於原始資料集,我們只需要用,就可以把原始資料集降維到最小投影距離或最大方差的維資料集。
3、過程
求樣本的維的主成分其實就是求樣本集的協方差矩陣的前個特徵值對應特徵向量矩陣,然後對於每個樣本,做如下變換,即達到降維的目的。
具體的演算法流程:
輸入:維樣本集,要降維到的維數。 輸出:降維後的樣本集 (1)對所有的樣本進行中心化:; (2)計算樣本的協方差矩陣; (3)對矩陣進行特徵值分解; (4)取出最大的個特徵值對應的特徵向量, 將所有的特徵向量標準化後,組成特徵向量矩陣; (5)對樣本集中的每一個樣本,轉化為新的樣本; (6)得到輸出樣本集。
有時候,我們不指定降維後的的值,而是換種方式,指定一個降維到的主成分比重閾值。這個閾值