特征工程是數(shù)據(jù)分析中最耗時間和精力的一部分工作,,它不像算法和模型那樣是確定的步驟,,更多是工程上的經驗和權衡。因此沒有統(tǒng)一的方法,。這里只是對一些常用的方法做一個總結,。本文關注于特征選擇部分。后面還有兩篇會關注于特征表達和特征預處理,。 1. 特征的來源在做數(shù)據(jù)分析的時候,,特征的來源一般有兩塊,一塊是業(yè)務已經整理好各種特征數(shù)據(jù),,我們需要去找出適合我們問題需要的特征,;另一塊是我們從業(yè)務特征中自己去尋找高級數(shù)據(jù)特征。我們就針對這兩部分來分別討論,。 2. 選擇合適的特征我們首先看當業(yè)務已經整理好各種特征數(shù)據(jù)時,,我們如何去找出適合我們問題需要的特征,此時特征數(shù)可能成百上千,,哪些才是我們需要的呢,? 第一步是找到該領域懂業(yè)務的專家,讓他們給一些建議,。比如我們需要解決一個藥品療效的分類問題,,那么先找到領域專家,向他們咨詢哪些因素(特征)會對該藥品的療效產生影響,,較大影響的和較小影響的都要,。這些特征就是我們的特征的第一候選集。 這個特征集合有時候也可能很大,,在嘗試降維之前,,我們有必要用特征工程的方法去選擇出較重要的特征結合,這些方法不會用到領域知識,,而僅僅是統(tǒng)計學的方法,。 最簡單的方法就是方差篩選。方差越大的特征,,那么我們可以認為它是比較有用的,。如果方差較小,比如小于1,,那么這個特征可能對我們的算法作用沒有那么大,。最極端的,如果某個特征方差為0,即所有的樣本該特征的取值都是一樣的,,那么它對我們的模型訓練沒有任何作用,,可以直接舍棄。在實際應用中,,我們會指定一個方差的閾值,,當方差小于這個閾值的特征會被我們篩掉。sklearn中的VarianceThreshold類可以很方便的完成這個工作,。 特征選擇方法有很多,,一般分為三類:第一類過濾法比較簡單,它按照特征的發(fā)散性或者相關性指標對各個特征進行評分,,設定評分閾值或者待選擇閾值的個數(shù),,選擇合適特征。上面我們提到的方差篩選就是過濾法的一種,。第二類是包裝法,,根據(jù)目標函數(shù),,通常是預測效果評分,,每次選擇部分特征,或者排除部分特征,。第三類嵌入法則稍微復雜一點,,它先使用某些機器學習的算法和模型進行訓練,得到各個特征的權值系數(shù),,根據(jù)權值系數(shù)從大到小來選擇特征,。類似于過濾法,但是它是通過機器學習訓練來確定特征的優(yōu)劣,,而不是直接從特征的一些統(tǒng)計學指標來確定特征的優(yōu)劣,。下面我們分別來看看3類方法。 2.1 過濾法選擇特征上面我們已經講到了使用特征方差來過濾選擇特征的過程,。除了特征的方差這第一種方法,,還有其他一些統(tǒng)計學指標可以使用。 第二個可以使用的是相關系數(shù),。這個主要用于輸出連續(xù)值的監(jiān)督學習算法中,。我們分別計算所有訓練集中各個特征與輸出值之間的相關系數(shù),設定一個閾值,,選擇相關系數(shù)較大的部分特征,。 第三個可以使用的是假設檢驗,比如卡方檢驗,??ǚ綑z驗可以檢驗某個特征分布和輸出值分布之間的相關性。個人覺得它比比粗暴的方差法好用。如果大家對卡方檢驗不熟悉,,可以參看這篇卡方檢驗原理及應用,,這里就不展開了。在sklearn中,,可以使用chi2這個類來做卡方檢驗得到所有特征的卡方值與顯著性水平P臨界值,,我們可以給定卡方值閾值, 選擇卡方值較大的部分特征,。 除了卡方檢驗,,我們還可以使用F檢驗和t檢驗,它們都是使用假設檢驗的方法,,只是使用的統(tǒng)計分布不是卡方分布,,而是F分布和t分布而已。在sklearn中,,有F檢驗的函數(shù)f_classif和f_regression,,分別在分類和回歸特征選擇時使用。 第四個是互信息,,即從信息熵的角度分析各個特征和輸出值之間的關系評分,。在決策樹算法中我們講到過互信息(信息增益)?;バ畔⒅翟酱?,說明該特征和輸出值之間的相關性越大,越需要保留,。在sklearn中,,可以使用mutual_info_classif(分類)和mutual_info_regression(回歸)來計算各個輸入特征和輸出值之間的互信息。 以上就是過濾法的主要方法,,個人經驗是,,在沒有什么思路的 時候,可以優(yōu)先使用卡方檢驗和互信息來做特征選擇 2.2 包裝法選擇特征包裝法的解決思路沒有過濾法這么直接,,它會選擇一個目標函數(shù)來一步步的篩選特征,。 最常用的包裝法是遞歸消除特征法(recursive feature elimination,以下簡稱RFE)。遞歸消除特征法使用一個機器學習模型來進行多輪訓練,,每輪訓練后,,消除若干權值系數(shù)的對應的特征,再基于新的特征集進行下一輪訓練,。在sklearn中,,可以使用RFE函數(shù)來選擇特征。 我們下面以經典的SVM-RFE算法來討論這個特征選擇的思路,。這個算法以支持向量機來做RFE的機器學習模型選擇特征,。它在第一輪訓練的時候,,會選擇所有的特征來訓練,得到了分類的超平面后,,如果有n個特征,,那么RFE-SVM會選擇出中分量的平方值最小的那個序號i對應的特征,將其排除,,在第二類的時候,,特征數(shù)就剩下n-1個了,我們繼續(xù)用這n-1個特征和輸出值來訓練SVM,,同樣的,,去掉最小的那個序號i對應的特征。以此類推,,直到剩下的特征數(shù)滿足我們的需求為止,。 2.3 嵌入法選擇特征嵌入法也是用機器學習的方法來選擇特征,但是它和RFE的區(qū)別是它不是通過不停的篩掉特征來進行訓練,,而是使用的都是特征全集,。在sklearn中,使用SelectFromModel函數(shù)來選擇特征,。 最常用的是使用L1正則化和L2正則化來選擇特征,。在之前講到的用scikit-learn和pandas學習Ridge回歸第6節(jié)中,我們講到正則化懲罰項越大,,那么模型的系數(shù)就會越小,。當正則化懲罰項大到一定的程度的時候,,部分特征系數(shù)會變成0,,當正則化懲罰項繼續(xù)增大到一定程度時,所有的特征系數(shù)都會趨于0. 但是我們會發(fā)現(xiàn)一部分特征系數(shù)會更容易先變成0,,這部分系數(shù)就是可以篩掉的,。也就是說,我們選擇特征系數(shù)較大的特征,。常用的L1正則化和L2正則化來選擇特征的基學習器是邏輯回歸,。 此外也可以使用決策樹或者GBDT。那么是不是所有的機器學習方法都可以作為嵌入法的基學習器呢,?也不是,,一般來說,可以得到特征系數(shù)coef或者可以得到特征重要度(feature importances)的算法才可以做為嵌入法的基學習器,。 3. 尋找高級特征在我們拿到已有的特征后,,我們還可以根據(jù)需要尋找到更多的高級特征。比如有車的路程特征和時間間隔特征,,我們就可以得到車的平均速度這個二級特征,。根據(jù)車的速度特征,,我們就可以得到車的加速度這個三級特征,根據(jù)車的加速度特征,,我們就可以得到車的加加速度這個四級特征,。。,。也就是說,,高級特征可以一直尋找下去。 在Kaggle之類的算法競賽中,,高分團隊主要使用的方法除了集成學習算法,,剩下的主要就是在高級特征上面做文章。所以尋找高級特征是模型優(yōu)化的必要步驟之一,。當然,,在第一次建立模型的時候,我們可以先不尋找高級特征,,得到以后基準模型后,,再尋找高級特征進行優(yōu)化。 尋找高級特征最常用的方法有: 若干項特征加和: 我們假設你希望根據(jù)每日銷售額得到一周銷售額的特征,。你可以將最近的7天的銷售額相加得到,。 當然,尋找高級特征的方法遠不止于此,,它需要你根據(jù)你的業(yè)務和模型需要而得,,而不是隨便的兩兩組合形成高級特征,這樣容易導致特征爆炸,,反而沒有辦法得到較好的模型,。個人經驗是,聚類的時候高級特征盡量少一點,,分類回歸的時候高級特征適度的多一點,。 4. 特征選擇小結特征選擇是特征工程的第一步,它關系到我們機器學習算法的上限,。因此原則是盡量不錯過一個可能有用的特征,,但是也不濫用太多的特征。
(歡迎轉載,,轉載請注明出處,。歡迎溝通交流: [email protected]) |
|