[机器学习笔记]Note12--降维
繼續是機器學習課程的筆記,本節介紹的是降維方法,這也是非監督學習中的一個問題,主要介紹主要成分分析(Principal Component Analysis,PCA)算法。
降維
動機一:數據壓縮
使用降維的一個原因是數據壓縮。下面通過幾個例子來介紹降維。
第一個例子是將數據從二維降至一維。假設我們要采用兩種不同的儀器來測量一些東西的尺寸,其中一個儀器測量結果的單位是英尺,另一個儀器測量的結果單位是厘米,我們希望將測量的結果作為機器學習的特征。現在的問題是,兩種儀器對同一個東西測量的結果不完全相等(由于誤差、精度等),而將兩者都作為特征有些重復,因而,我們希望將這個二維的數據降至一維。如下圖所示:
具體做法就是,找出一條合適的直線,如上圖下方那條直線,然后將所有的數據點都投射到該直線上,然后用z(i)標識,這樣便完成了從二維數據x(i)向一維數據z(i)的映射。這樣得到的新特征只是原有特征的近似,但好處是將需要的存儲、內存占用量減半,而已可以讓使用這些數據的算法運行得更快。
第二個例子是將數據從三維降至二維。這個例子的過程與上面類似,是將三維向量投射到一個二維平面上,強迫使得所有的數據都在同一個平面上,降至二維的特征向量。
這樣的處理過程可以被用于把任何維度的數據都降到任何想要的維度,如將1000維的特征降至100維。
動機二:數據可視化
在許多機器學習問題中,如果我們能將數據可視化,這有助于我們尋找到一個更好的解決方案,而降維可以幫助做到數據可視化。
一個例子是假設現在有關于許多不同國家的數據,每一個特征向量都有50個特征(如,GDP,人均GDP,平均壽命等),如下圖所示。
如果要將這個50維的數據可視化是不可能的,但是使用降維的方法將其降至2維,那就可以將其可視化。如下圖所示,用新的特征z1和z2來表現。
這樣的問題就是,降維的算法只負責減少維度,而新特征的意義就必須由我們自己去發現了。對于上述例子,我們根據新的二維特征畫出一個二維圖,如下圖所示,用點z(i)表示每個國家,那么可能會發現水平軸可能對應的是一個國家的面積或者是GDP,而縱軸計算對應人均GDP或者幸福感等。
主要成分分析(Principal Component Analysis,PCA)
主要成分分析時最常見的降維算法。
在PCA中,如果是將二維數據降至一維,我們要做的就是找到一個方向向量(Vector direction),當我們將所有的數據都投射到該向量上時,我們希望投射平均均方誤差可以盡可能地小。方向向量時一個經過原點的向量,而投射誤差是從特征向量向該方向向量作垂線的長度。如下圖所示
下面給出PCA問題的一般描述:
- 問題是將n維數據降至k維
目標是找到向量u(1),u(2),…,u(k)使得總的投射誤差最小
然后是比較PCA和線性回歸的,這兩種算法是不同的算法。PCA最小化的是投射誤差,而線性回歸嘗試的是最小化預測誤差。線性回歸的目的是預測結果,而PCA不作任何預測。如下圖所示
左圖是線性回歸的誤差,而右圖是PCA的誤差。
PCA算法
接下來是介紹PCA的具體實現過程。
首先是預處理過程,做的是均值歸一化。需要計算出所有特征的均值μj=1m∑mi=1x(i)j,然后令xj=xj?μj。如果特征是不同數量級的,還需要將其除以標準差σ2。
接下來就是正式的PCA算法過程了。也就是要計算協方差矩陣(covariance matrix)∑。而協方差矩陣∑=1m∑mi=1(x(i))(x(i))T。
然后就是計算協方差矩陣的特征向量(eigenvectors)。在Octave語言中可以利用**奇異值分解(singular value decomposition,SVD)來求解,[U,S,V] = svd(sigma)。
對于一個n×n維度的矩陣,上式中的U是一個具有與數據之間最小投射誤差的方向向量構成的矩陣。如果我們希望將數據從n維降至k維,我們只需要從U中選取前K個向量,獲得一個n×k維度的矩陣,這里用Ureduce表示,然后通過如下計算獲得要求的新特征向量z(i):
其中x是n×1維的,因此結果是k×1維。
注意,這里我們部隊偏倚特征進行處理。
在壓縮過數據后,我們可以采用如下方法來近似地獲得原有的特征:x(i)approx=Ureducez(i)
選擇主要成分的數量
PCA需要將n維數據降至k維數據,這里的k也就是PCA需要確定的參數K,也就是主要成分的數量。
主要成分分析是要減少投射的平均均方誤差:
而訓練集的方差是1m∑mi=1||x(i)||2。
我們希望的是在平均均方誤差與訓練集方差的比例盡可能小的情況下選擇盡可能小的K值。
一般來說,我們希望這個比例,如下所示,是小于1%,即意味著原本數據的偏差有99%都保留下來了。
而如果選擇保留95%的偏差,便能顯著地降低模型中特征的維度了。
所以做法可以是,先令K=1,然后進行PCA,獲得Ureduce和z,然后計算比例是否小于1%。如果不是,再令K=2,如此類推,直到找到可以使得比例小于1%的最小K值(原因是各個特征之間通常情況存儲某種相關性)。
還有一些更好的方式來選擇K,在Octave語言中調用svd函數的時候,我們獲得三個參數:[U,S,V]=svd(sigma)。其中S是一個n×n的矩陣,只有對角線上有值,其他單元都是0,我們可以使用這個矩陣來計算平均均方誤差與訓練集方差的比例:
也就是:
∑ki=1Sii∑mi=1Sii≥0.99
應用PCA
假設我們正在針對一張100×100像素的圖片進行某個計算機視覺的機器學習,即總共有10000個特征。這里可以使用PCA來降維來提高算法的速度。做法如下:
注意:只有在訓練集才運行PCA算法,而將訓練集中學到的Ureduce應用到交叉驗證集和測試集中。
錯誤使用PCA的情況有:
小結
本節內容介紹了使用降維的兩大原因,一個是進行數據壓縮,減少內存的使用,提高算法速度,第二個是為了數據可視化,從而找到一個更好的解決問題的方法。
降維方法中最常用的就是PCA算法,所以本節內容主要是介紹PCA算法的基本做法,具體實現過程,以及使用的方法和注意事項。
總結
以上是生活随笔為你收集整理的[机器学习笔记]Note12--降维的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 金融反欺诈-交易基础介绍
- 下一篇: 常见的BIOS硬盘故障现象及急救措施