1. 程式人生 > 其它 >機器學習筆記12

機器學習筆記12

降維

1.1 目標1:資料壓縮 Data Compression

現在來介紹第二個無監督學習:降維,降維的第一個作用就是壓縮資料,允許我們使用較少的記憶體或磁碟空間,也加快演算法速度

當我們發現特徵中有一些特徵是冗餘的(比如:特徵1是釐米,特徵2是英尺),那麼我們就需要通過降維來壓縮資料

將二維降到一維:

將三維降為二維:

1.2 目標2:視覺化 Data visualization

降維的第二個作用就是視覺化,可以將高維的資料進行視覺化

比如以下這個例子,特徵為各國的一些資訊,假設有50個特徵,那麼我們就很難將50維的影象構建出來

所以我們可以通過降維對資料進行視覺化

1.3 主成分分析問題描述 Principal Component Analysis problem formulation

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

如下圖,我們就認為紅色直線就是PCA要找的向量,因為投射平均均方誤差都比較小,而不是選擇洋紅色直線作為向量

更一般化的就是要將n維資料降至k維,目標是找到向量u(1) ,u(2) ,...,u(k) 使得總的投射誤差最小,比如3維降到2維就是找到向量u(1) ,u(2),將所有資料投射到由向量u(1) ,u(2)構成的平面上去

可能從下圖來看,會覺得PCA和線性迴歸有點相似,其實並不是的

PCA最小化的是投射誤差,不作任何預測。線性迴歸最小化的是預測誤差,目的是預測結果

左圖的是線性迴歸的誤差(垂直於橫軸投影),右圖則是主要成分分析的誤差(垂直於斜線投影)

現在就詳細的介紹一下PCA的演算法

第一步需要對特徵做均值歸一化,計算出所有特徵的均值,然後令 xj = xj − μj 。如果特徵是在不同的數量級上,還需要將其除以 最大值減去最小值 或者除以標準差 σ2

第二步需要計算協方差矩陣(covariance matrix) Σ,(讀音:sigma),公式為:

第三步需要計算協方差矩陣 Σ 的特徵向量(eigenvectors),在 Matlab 中呼叫 [U,S,V] = svd(sigma) 可以直接求得特徵向量

U(對於一個 n × n 維度的矩陣,U 是一個由 “與資料之間最小投射誤差的方向向量” 構成的矩陣)

如果希望將資料從 n 維降至 k 維,只需要從 U 中選取前 k 個向量,獲得一個 n × k 維度的矩陣,用Ureduce 表示

降維後新特徵向量 z(i)的計算公式為:

最後總結一下PCA的優點:

<1> 對資料進行降維處理,可以通過降維從而簡化模型

<2> 它是完全無引數限制的,最後的結果只與資料相關

1.4 重建原始特徵 Reconstruction from compressed representation

在之前介紹了將資料從高維降維到低維,其實在給定降維後的資料時,我們還可以重建降維前的資料

我們是通過 z = UreduceT * x 來獲得降維後的資料,可想而知我們就可以通過 xappox = Ureduce ⋅ z 來重建降維前的資料,這時就有 xappox ≈ x

1.5 主成分數量選擇 Choosing the number of principal components

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

我們的目標是:在『平均均方誤差與訓練集方差的比例儘可能小』的情況下,選擇儘可能小的 k 值

如果平均均方誤差與訓練集方差的比例小於 1%,就意味著有 99% 的原本資料都保留下來了。同理,比例為 5%,對應95%的原資料,比例10%,對應90%的原資料

通常原資料比例在 95%到99% 是最常用的取值範圍(對於許多資料集,通常可以在保留大比例原資料的同時大幅降低資料的維度。這是因為大部分原資料中的許多特徵變數都是高度相關的)

演算法的具體流程:

先令 k = 1,然後進行主成分分析,獲得Ureduce 、z和xappox,最後通過左圖公式計算比例是否小於 1% ,如果比例大於 1% 的話,再令k = 2,如此類推,直到找到可以使得比例小於 1%的最小k 值

除了以上這個方法,還有另一個方法:

通過在 Matlab 中呼叫 [U, S, V] = svd(sigma) 來獲得對角矩陣S(對角矩陣S的大小與Σ一致),再利用下面的公式直接計算平均均方誤差與訓練集方差的比例

1.6 PCA的應用建議 Advice for applying PCA

對於PCA的應用,假設對訓練集(x,y) (100×100 的影象,特徵 x 的維度為100×100=10000)採用監督學習的方式去預測,在預測前對特徵進行PCA處理,將資料壓縮至 1000 個特徵,x 轉變為 z,重新組建成訓練集(z,y),再進行預測

在PCA的應用上,建議運用在壓縮和視覺化上

不建議將其運用在防止過擬合上,雖然可能會有用,但是特徵減少了就有可能失去一些有用的資訊了。對於防止過擬合,可以採用加入的正則化的方式去解決

在一些專案上的運用,不建議一開始上來就使用PCA,最好還是從使用原始特徵開始,在有必要的時候(比如:演算法執行太慢或者佔用太多記憶體)才考慮採用 PCA