1. 程式人生 > >【原】Coursera—Andrew Ng機器學習—課程筆記 Lecture 14—Dimensionality Reduction 降維

【原】Coursera—Andrew Ng機器學習—課程筆記 Lecture 14—Dimensionality Reduction 降維

Lecture 14 Dimensionality Reduction 降維

14.1 降維的動機一:資料壓縮 Data Compression

現在討論第二種無監督學習問題:降維。 降維的一方面作用是資料壓縮,允許我們使用較少的記憶體或磁碟空間,也加快演算法速度。

例子:
假設我們用兩個特徵描述一個物品的長度,x1單位是釐米cm,x2 單位是英寸inches。這導致高度冗餘,所以需要減到一維。


將資料從三維降至二維: 將三維向量投射到一個二維的平面上,強迫使得所有的資料都在同一個平面上,降至二維的特徵向量。


這個過程可以用於把任何維度的資料降到任何想要的維度。事實工作中,不同的團隊可能會給你幾百或成千上萬的特徵,其中很容易出現冗餘特徵。

14.2 降維的動機二:資料視覺化 Visualization

降維可以幫助我們將高維資料視覺化。
假使有關於許多不同國家的資料,每一個特徵向量都有 50 個特徵(如 GDP,人均 GDP,平均壽命等)。如果要將這個 50 維的資料視覺化是不可能的。將其降至 2 維,便可將其可視化了。

 

 

這樣做的問題在於,降維演算法只負責減少維數,新產生的特徵的意義就必須由我們自己去發現了。 

14.3 PCA問題的公式描述 Principal Component Analysis Problem Formulation

主成分分析(PCA)是最常見的降維演算法。PCA 要做的是找到一個方向向量(Vector direction),當把所有的資料都投射到該向量上時,投射平均均方誤差儘可能小。方向向量是一個經過原點的向量,投射誤差是從特徵向量向該方向向量所作垂線的長度。如下圖:


主成分分析問題,要將n維資料降至k維,目標是找到向量u(1) ,u(2) ,...,u(k) 使得總的投射誤差 Projected Error 最小:


主成分分析與線性迴歸的比較:

主成分分析最小化的是投射誤差,不作任何預測。

線性迴歸最小化的是預測誤差,目的是預測結果。
上圖中,左邊的是線性迴歸的誤差(垂直於橫軸投影),右邊則是主要成分分析的誤差(垂直於斜線投影)。

PCA 將n個特徵降維到k個,可以用來進行資料壓縮,如果 100 維的向量最後可以用 10維來表示,那麼壓縮率為 90%。同樣影象處理領域的 KL 變換使用 PCA 做影象壓縮。但 PCA 要保證降維後資料的特性損失最小。


PCA 的一大好處是對資料進行降維處理。我們可以對新求出的“主元”向量的重要性進行排序,根據需要取前面最重要的部分,將後面的維數省去,可以達到降維從而簡化模型或是對資料進行壓縮的效果。同時最大程度保持原有資料的資訊

PCA 的一個很大的優點是,它是完全無引數限制的。在 PCA 的計算過程中完全不需要人為的設定引數或是根據任何經驗模型對計算進行干預,最後的結果只與資料相關,與使用者是獨立的。 但這同時也是缺點,如果使用者對觀測物件有一定的先驗知識,掌握了資料的一些特徵,卻無法通過引數化等方法對處理過程進行干預,可能會得不到預期的效果,效率也不高。

14.4 PCA演算法 Principal Component Analysis Algorithm

使用PCA 從 n 維減少到 k 維:
1)均值歸一化。計算出所有特徵的均值,然後令 xj = xj − μj 。如果特徵是在不同的數量級上,還需要將其除以標準差 σ2

2)計算協方差矩陣(covariance matrix) sigma Σ

3)計算協方差矩陣 Σ 的特徵向量(eigenvectors):
在 Octave 裡我們可以利用奇異值分解(singular value decomposition)來求解, [U, S,V] = svd(sigma) 。

 

對於一個 n × n 維度的矩陣,U是一個具有與資料之間最小投射誤差的方向向量構成的矩陣。如果希望將資料從 n 維降至 k 維,只需要從 U 中選取前 k 個向量,獲得一個 n × k 維度的矩陣,用Ureduce 表示,然後通過如下計算獲得要求的新特徵向量 z(i):

其中 x 為 n × 1 維,因此結果為 k × 1 維。注:我們不對方差特徵進行處理。

14.5 重建原始特徵 Reconstruction from Compressed Representation

給定壓縮後的低維資料 z(i)怎麼反向得到高維的x(i)資料? 即如何重建原始資料?

當 x 為 2 維,z 為 1 維,z = UreduceT * x, 則相反的方程為:
xappox = Ureduce ⋅ z,  這時xappox ≈ x。

14.5 選擇主成分的數量k Choosing The Number Of Principal Components

主要成分分析最小化投射的平均均方誤差,怎麼選擇適當降維目標 k 值(即主成分的數量)呢?

我們希望:在平均均方誤差與訓練集方差的比例儘可能小的情況下,選擇儘可能小的 k 值。

如果希望比例小於 1%, 就意味著原本資料的偏差有 99%都保留下來了。另外,還可以使用5%, 10% 這些比例。

可能95到99是最常用的取值範圍。(對於許多資料集,通常可以大幅地降低資料的維度卻還能保留大部分的差異性。這是因為對於大部分現實資料的許多特徵變數都是高度相關的)

具體做法:


a) 先令 k = 1,然後進行主要成分分析,獲得Ureduce 和z,然後計算比例是否小於1%。

b) 如果不是的話,再令k = 2,如此類推,直到找到可以使得比例小於 1%的最小k 值。

事實上還有一些更好的方式,當在 Octave 中呼叫“svd”函式的時候,我們獲得三個引數: [U, S, V] = svd(sigma) 。
其中 S 是一個n × n的矩陣,只有對角線上有值,而其它單元都是 0,我們可以直接使用這個矩陣來計算平均均方誤差與訓練集方差的比例,而不用一致重複計算誤差和方差:

14.7 PCA的應用建議 Advice for Applying PCA

假使我們正在針對一張 100×100 畫素的圖片進行某個計算機視覺的機器學習,即總共有 10000 個特徵。

1. 運用主要成分分析將資料壓縮至 1000 個特徵
2. 對訓練集執行學習演算法。
3. 在預測時,採用之前學習而來的Ureduce 將輸入的特徵 x 轉換成特徵向量 z ,然後再進行預測

注: 如果有交叉驗證資料集,也採用對訓練集學習而來的Ureduce

正確用法,壓縮和視覺化:

錯誤的用法:

1. 將其用於減少過擬合(通過減少特徵的數量)

這樣做非常不好,不如嘗試正則化處理。原因在於主要成分分析只是近似地丟棄掉一些特徵,它並不考慮任何與結果變數有關的資訊,因此可能會丟失非常重要的特徵。而當進行正則化處理時,會考慮到結果變數,不會丟掉重要的資料。

2. 在專案開始時便將PCA考慮進去

最好還是從所有原始特徵開始,只在有必要的時候(演算法執行太慢或者佔用太多記憶體)才考慮採用主要成分分析。