特徵工程
在建立模型的時候,最終是希望模型有較好的預測能力,但是在另一方面,也希望模型不要太複雜,以至於能有較好的解釋性和適用性。
1、定義
定義:在機器學習或者統計學中,又稱為 變數選擇 、 屬性選擇 或者 變數子集選擇 ,是在模型構建中,選擇相關特徵並構成特徵子集的過程 [3] 。
defination in wiki: In machine learning and statistics, feature selection, also known as variable selection, attribute selection or variable subset selection, is the process of selecting a subset of relevant features (variables, predictors) for use in model construction. [3]
從定義中我們看出,在特徵工程中的 特徵選擇 顧名思義,就是在特徵的全集上進行選擇。那麼為什麼要對特徵進行選擇呢?通過做實驗和看論文,我們可以看出,在實驗中並不是特徵越多越好,特徵越多固然會給我們帶來很多額外的資訊,但是與此同時,一方面,這些額外的資訊也 增加 實驗的 時間複雜度 和最終 模型的複雜度 ,造成的後果就是特徵的“ 維度災難 ”,使得計算耗時大幅度增加;另一方面,可能會導致模型的複雜程度上升而使得 模型變得不通用 。
2、目的
為了減少由於模型中存在眾多特徵時,會出現以上諸多缺點,我們就要在眾多的特徵中選擇儘可能 相關的特徵 和 有效的特徵 ,使得計算的 時間複雜度大幅度減少 並且 簡化模型 ,並且能保證最終模型的有效性不被減弱或者減弱很少,當然,有時候模型的有效性還會提高。這也就是我們特徵選擇的 目的 。
wiki中總結了使用特徵選擇技術的四個原因 [3] :
- 簡化模型,使之更易於被研究人員或使用者理解;
- 縮短訓練時間;
- 避免維度災難;[ ps:這個原因可以歸結到其他三個裡面,特別是第二個和第四個, 中文的wiki 裡面就沒有此項 ]
- 改善通用性、降低過擬合。
3、方法
到目前為止,我們可以發現,特徵選擇的主要工作就是 選擇 。如何選擇呢?這就是 搜尋選擇的一方面 。而在選擇的時候,我們必定會選擇 好的特徵 ,什麼樣的特徵算好的呢?這就需要 統一的評價指標的一方面 。可以看到,特徵選擇就是搜尋技術和評價指標的結合。對此,研究人員把特徵選擇的方法分為 基於搜尋策略的方法 和 基於評價準則劃分特徵選擇方法 。
在 部落格[5] 裡按照文獻[7]的中介紹的特徵選擇的一般過程【① 產生過程 (Generation Procedure);② 評價函式 (Evaluation Function);③ 停止準則 (Stopping Criterion);④ 驗證過程 (Validation Procedure);】做了介紹。通過圖1我們可以看到,特徵選擇的整個過程就是從特徵全集中選出一個特徵子集,然後通過評價函式對該特徵子集進行評價,如果結果比設定的停止準則好,則停止;否則就繼續產生下一個特徵子集;選好特徵子集後,還要通過一系列的驗證方法來驗證特徵子集的有效性。
圖1. 特徵選擇過程 [7]
計智偉等人 [6] 把特徵選擇視為特徵集合空間中的啟發式搜尋問題,認為特徵選擇演算法包含的 四個要素 為 1)搜尋起點和方向;2)搜尋策略;3)特徵評估函式;4)停止準則 。
3.1基於搜尋策略的方法
產生過程(Generation Procedure)就是 搜尋 特徵子空間的過程。
搜尋策略:完全搜尋、啟發式搜尋和隨機搜尋三種,但是一般情況此種分類都放在基於評價準則分類中的wrapper方法中。
1、 完全搜尋 :窮舉搜尋、非窮舉搜尋;
(I) 廣度優先遍歷( Breadth First Search ):廣度遍歷特徵子空間,列舉所有特徵組合,屬於窮舉搜尋,時間複雜度$O(2^n)$,實際中很少用到。
(II) 分支限界搜尋( Branch and Bound ):在窮舉搜尋時,加入分支限界。即加入一些限制,減掉那種無效的搜尋。
(III) 定向搜尋(Beam Search ):首先選擇N個得分最高的特徵作為特徵子集,然後加入一個限制最大長度的優先佇列,每次從佇列中取出得分最高的子集,然後窮舉向該子集中加入1個特徵後產生的所有特徵集,再將該特徵集加入佇列。
(IV) 最優優先搜尋( Beast First Search ):跟定向搜尋類似,但是不限制優先佇列長度。
2、 啟發式搜尋 :序列前向選擇、序列後向選擇、雙向搜尋、增L去R選擇演算法、序列浮動選擇、決策樹;
3、 隨機搜尋 :隨機產生序列選擇演算法、模擬退火演算法、遺傳演算法;
3.2基於評價準則劃分特徵選擇方法
評價準則一般從兩個方面進行考慮,但是總體來說就是關心某個特徵的 預測能力 (predictive power):
- 發散性:特徵的發散程度。例如特徵的方差為接近0,這說明樣本在這個特徵上差異性很小,則對於樣本的區分性也會比較小。
- 相關性:計算特徵與最終目標的相關性,如果相關性高,那麼我們應該優先選擇這個特徵。
根據選擇方法是否依賴於後續的學習,可以分為以下幾種方法:
- 過濾法 ( Filter ),通過選擇某些統計特徵(評價標準)進行過濾,例如,方差、相關係數。當然也可以限制特徵個數,或者設定特徵選擇的閾值來篩選特徵。
- 封(包)裝法 ( Wrapper ),根據目標函式選擇特徵或者排除特徵。
- 嵌入法 ( Embedded ),特徵選擇本身是作為學習演算法的一部分。首先使用機器學習的演算法和模型進行訓練,得到各個特徵的權值係數,然後根據係數的重要性對特徵進行選擇。例如線性迴歸的特徵係數,決策樹中特徵的資訊增益。
3.2.1過濾法(Filter)
過濾法一般使用 評價準則 來選擇特徵,從訓練資料中選擇全部特徵向量空間,並在此空間內進行過濾、搜尋,得到在閾值範圍內的特徵,確定最後的特徵子集,放入機器學習演算法中進行建模。具體如下圖所示:
圖2. Filter方法原理 [8]
評價標準函式分為四類: 距離度量、資訊度量、依賴性度量和一致性度量 。與特定的學習演算法無關,所以具有良好的通用性。常用的評價標準有:方差、相關係數、卡方檢驗、互資訊和最大資訊係數。
①方差
方差即衡量隨機變數和其數學期望之間的偏離程度,其公式如下:
$$\sigma^2=\frac{\sum(X-\mu)^2}{N}$$
其中,$$\sigma^2$$為總樣本方差,$X$為變數,$\mu$為總樣本均值,$N$為總樣本數。
在特徵選擇中,可以預設去除方差沒有達到定製標準的特徵。因為如果方差很小,證明此維特徵的差異性很小,則對最後結果的區分性也不是很大。
②相關係數
Pearson相關係數衡量 線性相關 、Spearman相關係數衡量 曲線相關 、Kendall相關係數衡量兩個變數 觀測排序的一致性 。對於相關和不相關,在閾值設定上是有非常大的主觀性的。
Pearson相關係數的值介於-1到1之間,1 表示變數完全正相關,0 表示無關,-1 表示完全負相關。計算公式:
$$r=\frac{1}{n-1}\sum_{i=1}^{n}(\frac{X_i-\overline{X}}{s_X})(\frac{Y_i-\overline{Y}}{s_Y})$$
其中$\overline{X},\overline{Y}$是樣本$X$和$Y$的平均值;$s_X,s_Y$是樣本$X$和$Y$的標準差。
注意:皮爾遜相關係數只對線性的特徵敏感,如果關係是非線性的,即便是兩個變數有很強的一一對應關係,pearson相關係數也有可能接近0。這種情況用spearman秩相關係數則能很好的表示出這種非線性的相關性。
ps:看到Pearson相關係數的公式,可以看到如果去除分母中兩個變數方差的乘積,則跟協方差是相同的,為什麼不用協方差來計算相關性呢?又何必多此一舉呢?肯定是有意義的,因為協方差只能呈現兩個變數的 是否 相關,協方差大於0,兩個變數正相關;協方差小於0,兩個變數負相關;但是表示不了相關的具體程度,例如兩個變數相關性很小,但是都比較分散(方差較大),這樣導致算出的協方差就會較大,所以用這個值來度量相關程度是不合理的。
好玩的網站 ,給你影象讓你在誤差之內猜相關性,超出誤差範圍就會損失一條命。
Spearman等級相關係數也叫秩相關係數,根據隨機變數的等級而不是其原始值衡量相關性的一種方法。計算方法和Pearson相關係數一樣,只是需要把原始資料變換成相應的等級順序:
(1,8,4,6)需要替換成(1,4,2,3);(3,100,200,201)需要替換成(1,2,3,4)然後再計算換完的Pearson相關係數。
Kendall相關係數又稱和諧係數,也是一種等級相關係數。對於$X,Y$的兩對觀察值$X_i,Y_i$和$X_j,Y_j$,如果$X_i<Y_i$並且$X_j<Y_j$,或者$X_i>Y_i$並且$X_j>Y_j$,則稱這兩對觀察值是和諧的,否則就是不和諧對。計算方法是和諧的觀察值對減去不和諧的觀察值對的數量,除以總的觀察值對數:
$$\tau=\frac{(number of concordant pairs)-(number of discordant pairs)}{\frac{1}{2}n(n-1)}$$
③卡方檢驗
卡方檢驗是檢 驗定性自變數 和 定性因變數 的相關性。在檢驗時,先做一個假設,假設兩個變數是獨立的;然後根據此假設計算獨立時應該的理論值;計算實際值與理論值之間的差異,從而推翻假設或者服從假設。當應用在特徵選擇中,不關心具體的值,所以也就不存在推翻不推翻原假設,只關心大小,然後排序。
$$\chi^2=\sum{\frac{(A-E)^2}{E}}=\sum_{i=1}^{k}{\frac{(A_i-E_i)^2}{E_i}}=\sum_{i=1}^{k}{\frac{(A_i-np_i)^2}{np_i}} (i=1,2,3,...,k)$$
④互資訊和最大資訊係數
互資訊表示隨機變數中包含另個一隨機變數的資訊量,例如兩個隨機變數(X,Y),互資訊是聯合分佈與乘積分佈的相對熵:
$$I(X;Y)=\sum_{y\in Y}\sum_{x\in X}p(x,y)log(\frac{p(x,y)}{p(x)p(y)})$$
後記:在計算時間上比較高效,但是容易選擇冗餘的特徵,因為在過濾特徵的時候不注重特徵之間的關聯關係。Guyon 和Elisseeff討論了過濾過程中的冗餘變數問題 [4] 。可能會錯過組合型特徵,例如某個特徵的分類效果很差,但是和其他特徵組合起來能得到較好的效果。
3.2.2封(包)裝法(Wrapper)
此類方法是以分類器的目標函式,即利用學習演算法的效能來評價特徵子集的優劣。其實可以理解為以最終模型結果驅動來選擇特徵子集,這裡也用到了在搜尋中的分類方法,通過不同的搜尋方法,選擇若干候選特徵子集,放入模型進行實驗,多次實驗選擇使得模型得到較優結果的特徵集合作為最終的特徵子集。所以,對於一個待評價的特徵子集,這種方法需要訓練一個分類器, 根據分類器的效能對該特徵子集進行評價 ,從而進行特徵選擇和特徵排除,最終選擇特徵子集,然後使用此分類器和特徵子集進行建模,具體原理如下:
圖3. Wrapper方法原理 [8]
Wrapper方法比Filter方法慢,但是此類方法得到的特徵子集效能通常更好,但是通用性不強,改變學習演算法時,需要針對特定的學習演算法按照相應的指標重新選擇特徵子集,而且要重新訓練和測試,所以對於這類方法通常計算複雜度挺高。其實每選擇一次特徵子集,就相當於進行了從頭到尾的一次實驗過程,個人認為這種是結果驅動的選擇,換了訓練的資料集都可能導致之前選擇的特徵子集失效。
3.2.3嵌入法(Embedded)
特徵選擇本身是作為學習演算法的一部分,是一種整合的方法,先使用某種學習演算法進行訓練,然後得到各個特徵的權值係數,根據係數的大小對特徵進行選擇。類似於Filter方法,但是要經過模型訓練才能得到相應的特徵權重值。例如 決策樹 演算法(ID3、C4.5、C5、CART)使用了資訊增益、資訊增益比、Gini係數等指標,在每一層樹增長的過程中,都需要進行特徵選擇。 線性迴歸演算法 中,通過訓練得到每個特徵值的權重,可以根據權重選擇特徵,重新訓練。 $L_1$範數 正則化,通過在成本或者損失函式中新增$L_1$範數,是的學習的結果滿足稀疏化,從而得到適合的特徵。這裡要注意的是加入$L_1$範數的懲罰項後,沒有選擇的特徵並不是代表不重要,所以一般 結合$L_2$範數 來優化處理。若一個特徵在L1中的權值為1,選擇在$L_2$中權值差別不大且在$L_1$中權值為0的特徵構成同類集合,將這一集合中的特徵平分$L_1$中的權值,故需要構建一個新的邏輯迴歸模型。
在求解的過程中,我們往往要在平方誤差項與正則化項之間折中,找出在平方誤差等值線和正則化項等值線相交處。從圖4中可以看出,採用$L_1$範數的時候,與平方誤差等值線的相交處經常出現在座標軸上,也就是說得到的一些權重值($\omega$)為0,所以,使用$L_1$範數的時候,我們能得到更稀疏的解 [9] 。Tibshirani在1996年提出的LASSO(Least Absolute Shrinkage and Selection Operator)迴歸就是使用L1範數。
圖4. $L_1$正則化比$L_2$正則化更容易得到稀疏解 [9]
區域性加權迴歸模型(LOESS),對於區域樣本使用多項式迴歸(Cleveland W1988)。這類區域性迴歸有極強的適應性,可以有效得到平滑的迴歸趨勢。
3.3Filter方法和Wrapper方法比較 [8]
Filter方法:
執行時間短( + ) :過濾法一般不會在資料集上進行迭代計算,而且是與分類器無關的,所以比訓練分類器要快。
一般性( + ) :由於過濾法是評價資料中屬性的本身的性質,而不是屬性與特定分類器的關聯關係(適合程度),所以得到的結果更具有一般性,而且對於很多分類器都能表現“良好”。
選擇大規模子集( - ):過濾法的一般性使它傾向於選擇 全部 最優的特徵子集,這也導致決定停止的條件決定權交給了使用者,造成了此方法較強的主觀性。
Wrapper方法:
準確性( + ) :相比於Filter方法,此方法能獲得較好的識別率,由於特徵子集是針對特定的分類器調準的(tune to)。
泛化能力( + ) :有很多機制可以防止過擬合,由於在分類器中可以使用 交叉驗證 等技術。
執行速度( - ) :wrapper方法對於每個候選的特徵子集,必須從頭訓練一個分類器甚至多個分類器(交叉驗證),所以對於計算密集型(computationally intensive methods)非常不適合。
一般性( - ) :缺少一般性,由於此種方法對分類器敏感,而不同的分類器具有不同原理的評價函式(損失函式),只能說最終選擇特徵子集是對當前分類器“最好”的。
4、參考:
[1] http://www.cnblogs.com/jasonfreak/p/5448385.html
[2] http://blog.peachdata.org/2017/02/08/selection1.html
[3] https://en.wikipedia.org/wiki/Feature_selection
[4] Guyon, Isabelle, and André Elisseeff. "An introduction to variable and feature selection." Journal of machine learning research 3.Mar (2003): 1157-1182.
[5] http://www.cnblogs.com/heaad/archive/2011/01/02/1924088.html
[6] 計智偉, 胡珉, 尹建新. 特徵選擇演算法綜述[J]. 電子設計工程, 2011, 19(9): 46-51.
[7] Dash M, Liu H. Feature selection for classification[J]. Intelligent data analysis, 1997, 1(1-4): 131-156.
[8] http://research.cs.tamu.edu/prism/lectures/pr/pr_l11.pdf
[9] 周志華,機器學習