2.機器學習演算法應用--特徵選擇
上一次我們聊過了數據的預處理中經常遇見的問題,今天我們聊一聊特徵選擇。先解釋一下什麼是特徵選擇,特徵選擇是指選擇獲得相應模型和演算法最好性能的特徵集。通常我們構建機器學習演算法時,可以收集很多維度的數據信息,當數據維度不多時,構建演算法的過程中可以將這些維度都放入到構建演算法中,但是當特徵維度達到一定量級後,將全部特徵放入到演算法中會帶來維度災難,演算法在有限的計算能力和時間內很難達到收斂,甚至可能會計算溢出。面對這種問題時特徵選擇就變得十分重要。
坊間常說:數據和特徵決定了機器學習的上限,而模型和演算法只是逼近這個上限而已。由此可見,特徵工程尤其是特徵選擇在機器學習中佔有相當重要的地位。今天我們就聊一聊特徵選擇的那些事兒?
一般情況下,特徵選擇的分類器的效果之間存在一個曲線,當特徵數量X在一個合理的位置時,分類器的效果會達到一個好的效果,如何選擇這個和合理的X就是特徵選擇方法該乾的事。
比較有名的特徵選擇有過濾法(Filter),包裹法(Wrapper),嵌入法(Embedded),如下詳細介紹一下這三種方法都是什麼。在介紹之前先介紹幾個名詞
特徵發散:如果特徵不發散,也就是說特徵的方差趨近於0,則代表這個特徵上不同樣本之間沒有差異性,對區分樣本的作用基本不存在。
特徵與目標的相關性:所謂相關性,就是說特徵和目標值之間存在正相關(隨著目標值的變大特徵值也逐漸變大)或者負相關的特性。代表了特徵值和目標值之間具有很強的數據上的因果關係。
(一)過濾法(Filter)
過濾法就是按照發散性或者相關性對各個特徵進行評分,設定閾值或者選擇閾值的個數,完成特徵選擇。
1. 方差法:這種方法通過計算每個特徵的的均值和方差,設定一個基礎閾值,當該維度的特徵方差小於基礎閾值時,則丟棄該特徵。這種方法簡單高效的過濾了一些低方差的特徵,但是存在一個問題就是閾值的設定是一個先驗條件,當設置過低時,保留了過多低效的特徵,設置過高則丟棄了過多有用的特徵。
2. 相關係數法之Pearson:比較有名的就是計算皮爾遜係數和互信息係數,要理解Pearson相關係數,首先要理解協方差(Covariance),協方差是一個反映兩個隨機變數相關程度的指標,如果一個變數跟隨著另一個變數同時變大或者變小,那麼這兩個變數的協方差就是正值,反之相反,公式如下:
Pearson相關係數公式如下:
可以看出協方差除以兩個變數的標準差就是Pearson係數。誠然協方差能反映兩個變數之間的相關程度,但是協方差的大小並不能很好的衡量兩個變數之間的關聯程度。一種正常的情況是如果兩個變數分布比較均勻(也就是標準差比較少),和另一組兩個變數分布比較離散(標準差比較大)。在相同協方差的情況下,第一組兩個變數比第二組兩個變數的相關性更強。基於這個規律可以得出相關性與標準差成反比,基於這種情況可以得出Pearson係數是衡量兩個變數相關性的一種有效手段。
3. 相關性方法之互信息:但Pearson係數存在一個問題是一般情況下只考慮了線性相關性,對非線性的變數相關性效果一般(源於計算協方差時的線性計算)。另一種互信息的方法解決了這種問題,互信息通過計算兩個變數之間對整個熵的情況來說明這一問題,互信息指的是兩個隨機變數之間的關聯程度,即給定一個隨機變數後,另一個隨機變數不確定性的削弱程度,因而互信息取值最小為0,意味著給定一個隨機變數對確定一另一個隨機變數沒有關係,最大取值為隨機變數的熵,意味著給定一個隨機變數,能完全消除另一個隨機變數的不確定性。其公式如下。
原來我對X有些不確定(不確定性為H(X)),告訴我Y後我對X不確定性變為H(X|Y), (建議有數學背景的推倒一下公式)這個不確定性的減少量就是X,Y之間的互信息I(X;Y)=H(X)-H(X|Y)。互信息通過利用信息熵的方式來對特徵之間的相關性進行衡量。克服了Pearson計算線性相關性的缺陷。但同時互信息法計算相關性帶來的計算量的複雜度。
(二)包裹法(Wrapper)
所謂包裹法就是選定特定演算法,然後再根據演算法效果來選擇特徵集合。
就是通過不斷的啟發式方法來搜索特徵,主要分為如下兩類。
方法一:選擇一些特徵,逐步增加特徵保證演算法模型精度是否達標。
方法二:刪除一些特徵,然後慢慢在保持演算法精度的條件下,縮減特徵。
(三)嵌入法(Embedded)
就是利用正則化的思想,將部分特徵屬性的權重調整到0,則這個特性相當於就是被捨棄了。常見的正則有L1的Lasso,L2的Ridge,還有一種綜合L1和L2的這兩個方法的Elastic Net方法。這其中在特徵選擇上L1的效果比較好,在嵌入法中是最常見的方法。
嵌入法的基本原理是通過在均方誤差的基礎上加入的正則化的矯正因子(L1,L2都屬於這一類)通過不斷通過求最小值的方法優化這個混合的損失函數,可以得出有些w權重因子為0,完成損失函數的正則化,避免了過擬合(後續章節會進一步介紹)。
降維
在選擇好特徵維度之後,有的時候仍然面對維度太多,或者維度之間存在一定的關聯關係的問題。這些問題可能會導致最終演算法的計算時間過長或者演算法在計算過程中在指定的計算平台上達到內存溢出等問題。面對這類問題,降維是一種主流的處理手段和方法。
常見的降維方法除了以上提到的基於L1懲罰項的模型以外,另外還有主成分分析法(PCA)和線性判別分析(LDA),線性判別分析本身也是一個分類模型。PCA和LDA有很多的相似點,其本質是要將原始的樣本映射到維度更低的樣本空間中,但是PCA和LDA的映射目標不一樣:PCA是為了讓映射後的樣本具有最大的發散性;而LDA是為了讓映射後的樣本有最好的分類性能。所以說PCA是一種無監督的降維方法,而LDA是一種有監督的降維方法。
LDA的全稱是Linear Discriminant Analysis(線性判別分析),是一種supervised learning。LDA的原理是,將帶上標籤的數據(點),通過投影的方法,投影到維度更低的空間中,使得投影后的點,會形成按類別區分,一簇一簇的情況,相同類別的點,將會在投影后的空間中更接近。要說明白LDA,首先得弄明白線性分類器(Linear Classifier):因為LDA是一種線性分類器。對於K-分類的一個分類問題,會有K個線性函數:
當滿足條件:對於所有的j,都有Yk > Yj,的時候,我們就說x屬於類別k。對於每一個分類,都有一個公式去算一個分值,在所有的公式得到的分值中,找一個最大的,就是所屬的分類了。
上式實際上就是一種投影,是將一個高維的點投影到一條高維的直線上,LDA最求的目標是,給出一個標註了類別的數據集,投影到了一條直線之後,能夠使得點盡量的按類別區分開,當k=2即二分類問題的時候,如下圖所示:
主成分分析(PCA)與LDA有著非常近似的意思,LDA的輸入數據是帶標籤的,而PCA的輸入數據是不帶標籤的,所以PCA是一種unsupervised learning。LDA通常來說是作為一個獨立的演算法存在,給定了訓練數據後,將會得到一系列的判別函數(discriminate function),之後對於新的輸入,就可以進行預測了。而PCA更像是一個預處理的方法,它可以將原本的數據降低維度,而使得降低了維度的數據之間的方差最大。
總結一下PCA的演算法步驟:
設有m條n維數據。
1)將原始數據按列組成n行m列矩陣X
2)將X的每一行(代表一個屬性欄位)進行零均值化,即減去這一行的均值
3)求出協方差矩陣C
4)求出協方差矩陣的特徵值及對應的特徵向量
5)將特徵向量按對應特徵值大小從上到下按行排列成矩陣,取前k行組成矩陣P
6)Y=PX即為降維到k維後的數據
可以看出通過利用協方差矩陣特徵值分解的原理將特徵值映射到新的特徵空間,新的特徵空間中依照特徵的重要性進行排序,其前K行就是最重要的K個特徵向量。完成了特徵向量的近視轉換。在最大限度保留特徵的區分度的情況下,縮減了特徵維度的數量。
本篇文章帶大家熟悉了一下特徵選擇是什麼?為什麼特徵選擇特別重要,以及常見的過濾法,包裹法和嵌入法三種特徵選擇方法。基本覆蓋了目前主流的特徵選擇方法。以及在選取特徵後如何通過降維的方法將特徵的數量控制在一個合理的數量上。在梳理這些知識的時候,經常會涉及到一些公式和函數。建議有時間的好好推倒一下這些公式,對公式的理解能從根本上理解一些規則的原理。很多規律性的東西,其內在都是公式的一種表現形式。誠然推倒公式確實很費力,與君共勉!
個人看法,歡迎討論。
推薦閱讀:
※數據科學家需要了解的5大聚類演算法
※打遊戲時領悟了「向死而生」,這個AI演算法真的不虛強化學習
※[阿里]獨家 | 一文讀懂複雜網路(應用、模型和研究歷史)
※2018-3-23 站務處理簡報:演算法應用再升級,瓦力解鎖新技能
※動態規劃演算法——轉載