1 特征工程概述
特征工程是機器學習中的一個關鍵步驟,在機器學習領域中占有非常重要的地位,是機器學習中不可或缺的一部分,下圖展示了一個常規的機器學習流程:
特征工程涉及從原始數據中提取、選擇和轉換特征,以改善模型的性能。特征工程對于構建有效的機器學習模型至關重要,因為模型的質量和性能很大程度上取決于輸入數據的質量。特征工程通常包括特征選擇、數據預處理、降維等環節。如下圖所示:
1.1 定義
-
特征工程(Feature Engineering)特征工程是將原始數據轉化成更好的表達問題本質的特征的過程,使得將這些特征運用到預測模型中能提高對不可見數據的模型預測精度。
-
特征工程簡單講就是發現對因變量y有明顯影響作用的特征,通常稱自變量x為特征,特征工程的目的是發現重要特征。
-
如何能夠分解和聚合原始數據,以更好的表達問題的本質?這是做特征工程的目的。 “feature engineering is manually designing what the input x’s should be.” “you have to turn your inputs into things the algorithm can understand.”
-
特征工程是數據挖掘模型開發中最耗時、最重要的一步。
1.2 意義
-
特征工程是一個包含內容很多的主題,也被認為是成功應用機器學習的一個很重要的環節。如何充分利用數據進行預測建模就是特征工程要解決的問題! “實際上,所有機器學習算法的成功取決于如何呈現數據。” “特征工程是一個看起來不值得在任何論文或者書籍中被探討的一個主題。但是他卻對機器學習的成功與否起著至關重要的作用。機器學習算法很多都是由于建立一個學習器能夠理解的工程化特征而獲得成功的。”——ScottLocklin,in “Neglected machine learning ideas”
-
數據中的特征對預測的模型和獲得的結果有著直接的影響。可以這樣認為,特征選擇和準備越好,獲得的結果也就越好。這是正確的,但也存在誤導。預測的結果其實取決于許多相關的屬性:比如說能獲得的數據、準備好的特征以及模型的選擇。
2 特征選擇
當數據預處理完成后,我們需要選擇有意義的特征輸入機器學習的算法和模型進行訓練。不同的特征對模型的影響程度不同,我們要自動地選擇出對問題重要的一些特征,移除與問題相關性不是很大的特征,這個過程就叫做特征選擇。特征的選擇在特征工程中十分重要,往往可以直接決定最后模型訓練效果的好壞。
通常來說,從兩個方面考慮來選擇特征:特征是否發散:如果一個特征不發散,例如方差接近于0,也就是說樣本在這個特征上基本上沒有差異,這個特征對于樣本的區分并沒有什么用。特征與目標的相關性:這點比較顯見,與目標相關性高的特征,應當優選選擇。
常用的特征選擇方法有:過濾式(filter)、包裹式(wrapper)、嵌入式(embedding)。
2.1 過濾式
過濾式特征選擇是通過評估每個特征和結果的相關性,來對特征進行篩選,留下相關性最強的幾個特征。核心思想是:先對數據集進行特征選擇,然后再進行模型的訓練。過濾式特征選擇的優點是思路簡單,往往通過Pearson相關系數法、方差選擇法、互信息法等方法計算相關性,然后保留相關性最強的N個特征,就可以交給模型訓練;缺點是沒有考慮到特征與特征之間的相關性,從而導致模型最后的訓練效果沒那么好。
2.2 包裹式
包裹式特征選擇是把最終要使用的機器學習模型、評測性能的指標作為特征選擇的重要依據,每次去選擇若干特征,或是排除若干特征。通常包裹式特征選擇要比過濾式的效果更好,但由于訓練過程時間久,系統的開銷也更大。最典型的包裹型算法為遞歸特征刪除算法,其原理是使用一個基模型(如:隨機森林、邏輯回歸等)進行多輪訓練,每輪訓練結束后,消除若干權值系數較低的特征,再基于新的特征集進行新的一輪訓練。
2.3 嵌入式
嵌入式特征選擇法是根據機器學習的算法、模型來分析特征的重要性,從而選擇最重要的N個特征。與包裹式特征選擇法最大的不同是,嵌入式方法是將特征選擇過程與模型的訓練過程結合為一體,這樣就可以快速地找到最佳的特征集合,更加高效、快捷。常用的嵌入式特征選擇方法有基于正則化項(如:L1正則化)的特征選擇法和基于樹模型的特征選擇法(如:GBDT)。
在選擇特征時,還包含如下方法:
-
組合特征: 結合兩個或多個特征,創建新的特征,以捕捉數據中的復雜關系。
-
基于領域知識的特征構造: 利用專業知識構建更具表現力的特征。
?
3 數據預處理
數據預處理是特征工程中最為重要的一個環節,良好的數據預處理可以使模型的訓練達到事半功倍的效果。數據預處理旨在通過歸一化、標準化、正則化等方式改進不完整、不一致、無法直接使用的數據。通過特征提取,我們能得到未經處理的特征,這時的特征可能有以下問題:
-
不屬于同一量綱:即特征的規格不一樣,不能夠放在一起比較。無量綱化可以解決這一問題。
-
信息冗余:對于某些定量特征,其包含的有效信息為區間劃分,例如學習成績,假若只關心“及格”或不“及 格”,那么需要將定量的考分,轉換成“1”和“0”表示及格和未及格。二值化可以解決這一問題。
-
定性特征不能直接使用:某些機器學習算法和模型只能接受定量特征的輸入,那么需要將定性特征轉換為定 量特征。最簡單的方式是為每一種定性值指定一個定量值,但是這種方式過于靈活,增加了調參的工作。通 常使用啞編碼的方式將定性特征轉換為定量特征:假設有N種定性值,則將這一個特征擴展為N種特征,當原 始特征值為第i種定性值時,第i個擴展特征賦值為1,其他擴展特征賦值為0。啞編碼的方式相比直接指定的方 式,不用增加調參的工作,對于線性模型來說,使用啞編碼后的特征可達到非線性的效果。
-
存在缺失值:缺失值需要補充。
-
信息利用率低:不同的機器學習算法和模型對數據中信息的利用是不同的,之前提到在線性模型中,使用對 定性特征啞編碼可以達到非線性的效果。類似地,對定量變量多項式化,或者進行其他的轉換,都能達到非 線性的效果。
我們使用sklearn中的preproccessing庫來進行數據預處理,可以覆蓋以上問題的解決方案
數據預處理具體方法如下:
3.1 歸一化
歸一化是對數據集進行區間縮放,縮放到[0,1]的區間內,把有單位的數據轉化為沒有單位的數據,即統一數據的衡量標準,消除單位的影響。這樣方便了數據的處理,使數據處理更加快速、敏捷。Skearn中最常用的歸一化的方法是:MinMaxScaler。此外還有對數函數轉換(log),反余切轉換等。
3.2 標準化
標準化是在不改變原數據分布的前提下,將數據按比例縮放,使之落入一個限定的區間,使數據之間具有可比性。但當個體特征太過或明顯不遵從高斯正態分布時,標準化表現的效果會比較差。標準化的目的是為了方便數據的下一步處理,比如:進行的數據縮放等變換。常用的標準化方法有z-score標準化、StandardScaler標準化等。
3.3 離散化
離散化是把連續型的數值型特征分段,每一段內的數據都可以當做成一個新的特征。具體又可分為等步長方式離散化和等頻率的方式離散化,等步長的方式比較簡單,等頻率的方式更加精準,會跟數據分布有很大的關系。 代碼層面,可以用pandas中的cut方法進行切分。總之,離散化的特征能夠提高模型的運行速度以及準確率。
3.4 二值化
特征的二值化處理是將數值型數據輸出為布爾類型。其核心在于設定一個閾值,當樣本書籍大于該閾值時,輸出為1,小于等于該閾值時輸出為0。我們通常使用preproccessing庫的Binarizer類對數據進行二值化處理。
3.5 啞編碼
我們針對類別型的特征,通常采用啞編碼(One_Hot Encodin)的方式。所謂的啞編碼,直觀的講就是用N個維度來對N個類別進行編碼,并且對于每個類別,只有一個維度有效,記作數字1 ;其它維度均記作數字0。但有時使用啞編碼的方式,可能會造成維度的災難,所以通常我們在做啞編碼之前,會先對特征進行Hash處理,把每個維度的特征編碼成詞向量。
以上為大家介紹了幾種較為常見、通用的數據預處理方式,但只是浩大特征工程中的冰山一角。往往很多特征工程的方法需要我們在項目中不斷去總結積累比如:針對缺失值的處理,在不同的數據集中,用均值填充、中位數填充、前后值填充的效果是不一樣的;對于類別型的變量,有時我們不需要對全部的數據都進行啞編碼處理;對于時間型的變量有時我們有時會把它當作是離散值,有時會當成連續值處理等。所以很多情況下,我們要根據實際問題,進行不同的數據預處理。
?
4 數據降維
如果拿特征選擇后的數據直接進行模型的訓練,由于數據的特征矩陣維度大,可能會存在數據難以理解、計算量增大、訓練時間過長等問題,因此我們要對數據進行降維。降維是指把原始高維空間的特征投影到低維度的空間,進行特征的重組,以減少數據的維度。降維與特征最大的不同在于,特征選擇是進行特征的剔除、刪減,而降維是做特征的重組構成新的特征,原始特征全部“消失”了,性質發生了根本的變化。常見的降維方法有:主成分分析法(PCA)和線性判別分析法(LDA)。
4.1 主成分分析法
主成分分析法(PCA)是最常見的一種線性降維方法,其要盡可能在減少信息損失的前提下,將高維空間的數據映射到低維空間中表示,同時在低維空間中要最大程度上的保留原數據的特點。主成分分析法本質上是一種無監督的方法,不用考慮數據的類標,它的基本步驟大致如下:
-
數據中心化(每個特征維度減去相應的均值)
-
計算協方差矩陣以及它的特征值和特征向量
-
將特征值從大到小排序并保留最上邊的N個特征
-
將高維數據轉換到上述N個特征向量構成的新的空間中
此外,在把特征映射到低維空間時要注意,每次要保證投影維度上的數據差異性最大(也就是說投影維度的方差最大)。
算法詳見:https://blog.csdn.net/lsb2002/article/details/131815123
4.2 線性判別分析法
線性判別分析法(LDA)也是一種比較常見的線性降維方法,但不同于PCA的是,它是一種有監督的算法,也就是說它數據集的每個樣本會有一個輸出類標。線性判別算法的核心思想是,在把數據投影到低維空間后,希望同一種類別數據的投影點盡可能的接近,而不同類別數據的類別中心之間的距離盡可能的遠。也就是說LDA是想讓降維后的數據點盡可能地被區分開。
算法詳見:https://blog.csdn.net/lsb2002/article/details/131843006
?
5 特征工程的挑戰
-
自動化: 盡管有些特征工程步驟可以自動化,但很多任務仍需要專業知識和經驗判斷。
-
復雜性和計算成本: 特征工程可以非常復雜且耗時,特別是在處理大型數據集時。
-
模型依賴性: 不同的模型可能對特征的需求不同,因此特征工程需要針對特定的模型進行調整。
5 總結
特征工程是構建高效機器學習模型的關鍵。它包括一系列技術和步驟,旨在通過提取、選擇和轉換特征來優化模型的輸入數據。盡管特征工程是一個復雜且需要大量專業知識的過程,但它對于提高模型性能和準確性至關重要。隨著機器學習領域的發展,特征工程的方法和工具也在不斷進步,使得這一過程更加高效和自動化。