特征工程完全手册 - 从预处理、构造、选择、降维、不平衡处理
“數據科學競賽到底比的是什么?”這個問題,問10個大神,大概會有9個人告訴你“特征工程+模型融合”。但是翻遍整個知乎,講模型的挺多,講特征工程的就屈指可數了。于是我就去和鯨社區給大家搞了一個教程過來~
這篇特征工程的知識點比較全面,涵蓋了數據預處理、特征選擇、特征構造、特征降維以及類別不平衡處理等知識點,并附帶代碼實現功能。
原文有點長,我挑重點內容呈現給大家搬搬,如果反響好的話(請給我一個wink你懂的),我再把基礎的技巧和代碼補上~
想看code和數學公式的,請移步原文>>【特征工程系列】特征工程理論與代碼實現
另外,最近上線了姊妹篇?模型集成完全手冊——套娃的藝術:將模型作為特征進行建模?,歡迎串門。
1.特征構造
- 概念及工作原理
概念:特征構造主要是產生衍生變量,所謂衍生變量是指對原始數據進行加工、特征組合,生成有商業意義的新變量(新特征)
- 別稱 特征構造也可稱為特征交叉、特征組合、數據變換
- 優缺點
優點?:新構造的有效且合理的特征可提高模型的預測表現能力。
缺點:
1.1.特征設計原理
新特征設計應與目標高度相關,要考慮的問題:
新構建特征驗證其有效性要考慮的問題:
1.2.特征構造常用方法
特征構造需要不斷結合具體業務情況做出合理分析,才能有根據性的構造出有用的新特征。
1.2.1.統計值構造法
指通過統計單個或者多個變量的統計值(max,min,count,mean)等而形成新的特征。
方法
- 單變量
如果某個特征與目標高度相關,那么可以根據具體的情況取這個特征的統計值作為新的特征。
- 多變量
如果特征與特征之間存在交互影響時,那么可以聚合分組兩個或多個變量之后,再以統計值構造出新的特征。
舉例
單變量:衣服顏色和你一樣的小朋友數量作為新特征
多變量:衣服顏色和你一樣的小朋友的身高的平均值作為新特征
1.2.2.連續數據離散化
有些時候我們需要對數據進行粗粒度、細粒度劃分,以便模型更好的學習到特征的信息,比如:
- 粗粒度劃分(連續數據離散化):將年齡段0~100歲的連續數據進行粗粒度處理,也可稱為二值化或離散化或分桶法
- 細粒度劃分:在文本挖掘中,往往將段落或句子細分具體到一個詞語或者字,這個過程稱為細粒度劃分
方法
- 特征二值化
設定一個劃分的閾值,當數值大于設定的閾值時,就賦值為1;反之賦值為0。典型例子:劃分年齡段
- 無監督離散化
分箱法:等寬(寬度)分箱法、等頻(頻數)分箱法 聚類劃分:使用聚類算法將數據聚成幾類,每一個類為一個劃分
典型例子
年齡、收入
優缺點
優點:(1)降低數據的復雜性 (2)可在一定程度上消除多余的噪聲
1.2.3.離散數據編碼化
很多算法模型不能直接處理字符串數據,因此需要將類別型數據轉換成數值型數據
方法
- 序號編碼
通常用來處理類別間具有大小關系的數據,比如成績(高中低)
- 獨熱編碼(One-hot Encoding)
通常用于處理類別間不具有大小關系的特征,比如血型(A型血、B型血、AB型血、O型血), 獨熱編碼會把血型變成一個稀疏向量,A型血表示為(1,0,0,0),B型血表示為(0,1,0,0), AB型血表示為(0,0,1,0),O型血表示為(0,0,0,1)
- 二進制編碼
二進制編碼主要分為兩步,先用序號編碼給每個類別賦予一個類別ID,然后將類別ID對應的二進制編碼作為結果。 以A、B、AB、O血型為例,A型血表示為00,B型血表示為01, AB型血表示為10,O型血表示為11
優缺點
缺點:有些模型不支持離散字符串數據,離散編碼便于模型學習
1.2.4.函數變換法
方法?簡單常用的函數變換法(一般針對于連續數據):平方(小數值—>大數值)、開平方(大數值—>小數值)、指數、對數、差分
典型例子
對時間序列數據進行差分
數據不呈正態分布時可運用
當前特征數據不利于被模型捕獲時
優缺點
優點:
1.2.5.算術運算構造法
根據實際情況需要,結合與目標相關性預期較高的情況下,由原始特征進行算數運算而形成新的特征。
解讀概念為幾種情況:
1.2.6.自由發揮
在特征構造這一塊是沒有什么明文規定的方法,特征構造更多的是結合實際情況,有針對性的構造與目標高度相關的特征,只要構造的新特征能夠解釋模型和對模型具有促進作用,都可以作為新指標新特征。
2.特征選擇
2.1.特征選擇概述
從哪些方面來選擇特征呢?
當數據處理好之后,我們需要選擇有意義的特征輸入機器學習的模型進行訓練,通常來說要從兩個方面考慮來選擇特征,如下:
如果一個特征不發散,例如方差接近于0,也就是說樣本在這個特征上基本上沒有差異,這個特征對于樣本的區分并沒有什么用。
這點比較顯見,與目標相關性高的特征,應當優先選擇。
區別:特征與特征之間相關性高的,應當優先去除掉其中一個特征,因為它們是替代品。
為什么要進行特征選擇?
處理高維數據的兩大主流技術
特征選擇和降維
特征選擇有哪些方法呢?
2.2.Filter 過濾法
它主要側重于單個特征跟目標變量的相關性。
優點是計算時間上較高效,對于過擬合問題也具有較高的魯棒性。
缺點就是傾向于選擇冗余的特征,因為他們不考慮特征之間的相關性,有可能某一個特征的分類能力很差,但是它和某些其它特征組合起來會得到不錯的效果,這樣就損失了有價值的特征。
2.2.1.方差選擇法
方差是衡量一個變量的離散程度(即數據偏離平均值的程度大小),變量的方差越大,我們就可以認為它的離散程度越大,也就是意味著這個變量對模型的貢獻和作用會更明顯,因此要保留方差較大的變量,反之,要剔除掉無意義的特征。
2.2.2.相關系數法
方法一:計算特征與特征的相關系數
通過計算特征與特征之間的相關系數的大小,可判定兩兩特征之間的相關程度
公式
優缺點
優點:容易實現
缺點:只是根據特征與特征之間的相關度來篩選特征,但并沒有結合與目標的相關度來衡量
應用場景
用于特征選擇,以提取最有效的特征作為目標,剔除冗余特征
方法二:計算特征與目標的相關系數以及P值
r, p = scipy.stats.pearsonr(x, y) # r:相關系數[-1,1]之間 # p:相關系數顯著性相關性的強度確實是用相關系數的大小來衡量的,但相關大小的評價要以相關系數顯著性的評價為前提
因此,要先檢驗相關系數的顯著性,如果顯著,證明相關系數有統計學意義,下一步再來看相關系數大小;
如果相關系數沒有統計學意義,那意味著你研究求得的相關系數也許是抽樣誤差或者測量誤差造成的,再進行一次研究結果可 能就大不一樣,此時討論相關性強弱的意義就大大減弱了。
優缺點
Pearson相關系數的一個明顯缺陷是,作為特征排序機制,他只對線性關系敏感。
如果關系是非線性的,即便兩個變量具有一一對應的關系,Pearson相關性也可能會接近0
應用場景及意義
應用于回歸問題的特征選擇,旨在選擇出最有效的信息和減少內存占用空間
2.2.3.卡方檢驗
卡方檢驗是檢驗定性自變量對定性因變量的相關性,求出卡方值,然后根據卡方值匹配出其所對應的概率是否足以推翻原假設H0,如果能推翻H0,就啟用備用假設H1。參考資料-特征選擇---SelectKBest
優缺點
優點:可以很好地篩選出與定性應變量有顯著相關的定性自變量。
應用場景及意義
應用場景:適用于分類問題的分類變量
2.2.4.互信息法
原理及實現參考資料-互信息原理及實現
應用場景及意義
應用場景:因此非常適合于文本分類的特征和類別的配準工作
2.3.Wrapper 包裝法
封裝器用選取的特征子集對樣本(標簽)集進行訓練學習,訓練的精度(準確率)作為衡量特征子集好壞的標準, 經過比較選出最好的特征子集。
常用的有逐步回歸(Stepwise regression)、向前選擇(Forward selection)和向后選擇(Backward selection)。
優缺點
優點:考慮了特征之間組合以及特征與標簽之間的關聯性。
缺點:由于要劃分特征為特征子集并且逐個訓練評分,因此當特征數量較多時,計算時間又會增長;另外在樣本數據較少的時候,容易過擬合。
2.3.1.穩定性選擇(Stability Selection)
穩定性選擇是一種基于二次抽樣和選擇算法(訓練模型)?相結合的方法,選擇算法可以是回歸、分類SVM或者類似算法。
原理實現
在不同的特征子集上運行訓練模型,不斷地重復,最終匯總特征選擇的結果。比如可以統計某個特征被認為是重要特征的頻率 (被選為重要特征的次數除以它所在的子集被測試的次數)。理想情況下,重要特征的得分會接近100%。稍微弱一點的特征得分會是非0的數, 而最無用的特征得分將會接近于0。
優缺點
優點:
特征值下降的不是特別急劇,這跟純lasso的方法和隨機森林的結果不一樣, 能夠看出穩定性選擇對于克服過擬合和對數據理解來說都是有幫助的。
總的來說,好的特征不會因為有相似的特征、關聯特征而得分為0。
在許多數據集和環境下,穩定性選擇往往是性能最好的方法之一。
2.3.2.遞歸特征消除
Recursive Feature Elimination,簡稱RFE
工作原理
主要思想是:
通識來說: RFE算法的主要思想就是使用一個基模型(這里是S模型VM)來進行多輪訓練,
每輪訓練后,根據每個特征的系數對特征打分,去掉得分最小的特征,
然后用剩余的特征構建新的特征集,進行下一輪訓練,直到所有的特征都遍歷了。
這個過程中特征被消除的次序就是特征的排序,實際上這是一種尋找最優特征子集的貪心算法。
優缺點
RFE的穩定性很大程度上取決于在迭代選擇的時候,選擇哪一種模型。
2.3.3.特征值排序選擇
概念及工作原理
理論上來講,如果某個特征進行排序或者打亂之后,會很明顯的影響(無論正向影響還是負向影響)到模型(預測評分)效果評分,
那么可以說明這個特征對模型來說是重要的;反之,說明這個特征存不存在并不會影響到模型的效能。
基于這么個原理,我們可以提出:
(1)特征在進行排序或者打亂之后,會很明顯影響模型性能的特征,劃定為重要特征。
(2)特征在進行排序或者打亂之后,對模型性能幾乎沒有影響,劃定為不重要特征。
2.4.Embedded 嵌入法
先使用某些機器學習的算法和模型進行訓練,得到各個特征的權重值系數,
根據系數從大到小選擇特征。類似于Filter方法,但是是通過訓練來確定特征的優劣。
Regularization,或者使用決策樹思想,Random Forest和Gradient boosting等
包裝法與嵌入法的區別:包裝法根據預測效果評分來選擇,而嵌入法根據預測后的特征權重值系數來選擇。
工作原理
先使用某些機器學習的算法和模型進行訓練,得到各個特征的權值系數,根據系數從大到小選擇特征。
有些機器學習方法本身就具有對特征進行打分的機制,或者很容易將其運用到特征選擇任務中,
例如回歸模型,SVM,樹模型(決策樹、隨機森林)等等
2.4.1.線性模型
工作原理
越是重要的特征在模型中對應的系數就會越大,而跟目標(標簽)變量越是無關的特征對應的系數就會越接近于0。
在噪音不多的數據上,或者是數據量遠遠大于特征數的數據上,如果特征之間相對來說是比較獨立的,
那么即便是運用最簡單的線性回歸模型也一樣能取得非常好的效果
優缺點
缺點:
2.4.2.正則化
正則化就是把額外的約束或者懲罰項加到已有模型(損失函數)上,以防止過擬合并提高泛化能力。
工作原理
L1正則化Lasso(least absolute shrinkage and selection operator)將系數w的l1范數作為懲罰項加到損失函數上,由于正則項非零,這就迫使那些弱的特征所對應的系數變成0。因此L1正則化往往會使學到的模型很稀疏(系數w經常為0),這個特性使得L1正則化成為一種很好的特征選擇方法。
L2正則化同樣將系數向量的L2范數添加到了損失函數中。由于L2懲罰項中系數是二次方的,這使得L2和L1有著諸多差異,最明顯的一點就是,L2正則化會讓系數的取值變得平均。
優缺點
L1正則化缺點:L1正則化像非正則化線性模型一樣也是不穩定的,如果特征集合中具有相關聯的特征,當數據發生細微變化時也有可能導致很大的模型差異。
L2正則化優點:L2正則化對于特征選擇來說一種穩定的模型,不像L1正則化那樣,系數會因為細微的數據變化而波動。
總結:L2正則化和L1正則化提供的價值是不同的,L2正則化對于特征理解來說更加有用:表示能力強的特征對應的系數是非零。
2.4.3.樹模型
工作原理
隨機森林具有準確率高、魯棒性好、易于使用等優點,隨機森林提供了兩種特征選擇的方法:
1. 平均不純度減少
2. 平均精確率減少
3.類別標簽不平衡處理
參考資料
類別標簽不平衡問題是指
在分類任務中,數據集中來自不同類別的樣本數目相差懸殊。
舉個例子:
假設類別 A 的樣本數量有 M 個,類別 B 的樣本數量有 N 個,并且 M >>> N(假設 M:N=9:1),
這種情況我們就可以判定此數據集存在嚴重的類別標簽不平衡的問題,為了防止模型出現嚴重誤差,
因此在建模前需要就樣本不平衡問題處理。
類別不平衡問題會造成這樣的后果
在數據分布不平衡時,其往往會導致分類器的輸出傾向于在數據集中占多數的類別。
輸出多數類會帶來更高的分類準確率,但在我們所關注的少數類中表現不佳。
常用方法
欠采樣、過采樣及加權處理。
類別標簽不平衡情況下的評價指標
準確率在類別不平衡數據上,說服力最差。應考慮精確率、召回率、F1 值、F-R 曲線和 AUC 曲線。
3.1.欠采樣
所謂欠采樣是指把占比多的類別 A 樣本數量(M=900)減少到與占比少的類別 B 樣本數量(N=100)一致,然后進行訓練。
第一種方法(隨機欠采樣)
隨機欠采樣是指通過隨機抽取的方式抽取類別 A 中 100 個樣本數據與類別 B 中的 100 個樣本進行模型訓練。
隨機欠采樣的缺點:欠采樣只是采取少部分數據,容易造成類別 A 的信息缺失
第二種方法(代表性算法:EasyEnsemble 集成學習法)
算法思想:利用集成學習機制,將占比多的類別 A 樣本數據劃分為若干個樣本子集供不同學習器使用,
這樣對每個學習器來看都進行了欠采樣,但在全局來看卻不會丟失重要信息。
算法原理如下:
第一步:首先從占比多的類別 A 樣本中獨立隨機抽取出若干個類別 A 樣本子集。
第二步:將每個類別 A 的樣本子集與占比少的類別 B 樣本數據聯合起來,訓練生成多個基分類器。
第三步:最后將這些基分類器組合形成一個集成學習系統。集成可采用加權模型融合或者取所有基分類器總和的平均值。
EasyEnsemble 集成學習法優點:可以解決傳統隨機欠采樣造成的數據信息丟失問題,且表現出較好的不均衡數據分類性能。
3.2.過采樣
所謂過采樣是指把占比少的類別 B 樣本數量(N=100)擴增到占比多的類別 A 樣本數量(M=900)一致,然后進行訓練。
第一種方法(隨機過采樣):
由于隨機過采樣采取簡單復制樣本的策略來增加少數類樣本,這樣容易產生模型過擬合的問題,
即使得模型學習到的信息過于特別(Specific)而不夠泛化(General),因此很少使用這種方法。
經典代表性算法是 SMOTE 算法:
SMOTE原理參考資料
SMOTE 的全稱是 Synthetic Minority Over-Sampling Technique 即“人工少數類過采樣法”,非直接對少數類進行重采樣,
而是設計算法來人工合成一些新的少數樣本。
算法原理如下:
(1)在占比少的類別 B 中隨機抽取一個樣本 a,從 a 的最近鄰 k 個數據中又隨機選擇一個樣本 b。
(2)在 a 和 b 的連線上(或者說[a,b]區間中)隨機選擇一點作為新的少數類樣本。
3.3.加權處理
加權處理是指通過調整不同類型標簽的權重值,增加占比少的類別 B 樣本數據的權重,降低占比多的類別 A 樣本數據權重,
從而使總樣本占比少的類別 B 的分類識別能力與類別 A 的分類識別能力能夠同等抗衡。
加權處理原理如下:
遍歷每一個樣本,設總樣本占比多的類別 A 的權重為 W1(自定義),總樣本占比少的類別 B 的權重為 W2(自定義),其中 W2 > W1。
其實這個也類似于對模型進行懲罰,從而影響各個類別標簽的重要性。
以上對【特征工程系列】特征工程理論與代碼實現?一文進行節選,另有“數據預處理”章節及代碼、公式等略去,感興趣的可以點擊鏈接前往。
總結
以上是生活随笔為你收集整理的特征工程完全手册 - 从预处理、构造、选择、降维、不平衡处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 胆囊炎能不能吃西红柿
- 下一篇: 胆囊炎能不能吃黑米