1. 程式人生 > >特征工程

特征工程

選擇法 我們 core odi 特征向量 分享 har 遞歸 選擇

特征工程是機器學習中不可或缺的一部分,在機器學習領域中占有非常重要的地位。

特征工程,是指用一系列工程化的方式從原始數據中篩選出更好的數據特征,以提升模型的訓練效果。業內有一句廣為流傳的話是:數據和特征決定了機器學習的上限,而模型和算法是在逼近這個上限而已。由此可見,好的數據和特征是模型和算法發揮更大的作用的前提。特征工程通常包括數據預處理、特征選擇、降維等環節。如下圖所示:

技術分享圖片

一.數據預處理

數據預處理是特征工程中最為重要的一個環節,良好的數據預處理可以使模型的訓練達到事半功倍的效果。數據預處理旨在通過歸一化、標準化、正則化等方式改進不完整、不一致、無法直接使用的數據。具體方法有:

1.歸一化

歸一化是對數據集進行區間縮放,縮放到[0,1]的區間內,把有單位的數據轉化為沒有單位的數據,即統一數據的衡量標準,消除單位的影響。這樣方便了數據的處理,使數據處理更加快速、敏捷。Skearn中最常用的歸一化的方法是:MinMaxScaler。此外還有對數函數轉換(log),反余切轉換等。

2.標準化

標準化是在不改變原數據分布的前提下,將數據按比例縮放,使之落入一個限定的區間,使數據之間具有可比性。但當個體特征太過或明顯不遵從高斯正態分布時,標準化表現的效果會比較差。標準化的目的是為了方便數據的下一步處理,比如:進行的數據縮放等變換。常用的標準化方法有z-score標準化、StandardScaler標準化等。

3.離散化

離散化是把連續型的數值型特征分段,每一段內的數據都可以當做成一個新的特征。具體又可分為等步長方式離散化和等頻率的方式離散化,等步長的方式比較簡單,等頻率的方式更加精準,會跟數據分布有很大的關系。 代碼層面,可以用pandas中的cut方法進行切分。總之,離散化的特征能夠提高模型的運行速度以及準確率。

4.二值化

特征的二值化處理是將數值型數據輸出為布爾類型。其核心在於設定一個閾值,當樣本書籍大於該閾值時,輸出為1,小於等於該閾值時輸出為0。我們通常使用preproccessing庫的Binarizer類對數據進行二值化處理。

5.啞編碼

我們針對類別型的特征,通常采用啞編碼(One_Hot Encodin)的方式。所謂的啞編碼,直觀的講就是用N個維度來對N個類別進行編碼,並且對於每個類別,只有一個維度有效,記作數字1 ;其它維度均記作數字0。但有時使用啞編碼的方式,可能會造成維度的災難,所以通常我們在做啞編碼之前,會先對特征進行Hash處理,把每個維度的特征編碼成詞向量。

以上為大家介紹了幾種較為常見、通用的數據預處理方式,但只是浩大特征工程中的冰山一角。往往很多特征工程的方法需要我們在項目中不斷去總結積累比如:針對缺失值的處理,在不同的數據集中,用均值填充、中位數填充、前後值填充的效果是不一樣的;對於類別型的變量,有時我們不需要對全部的數據都進行啞編碼處理;對於時間型的變量有時我們有時會把它當作是離散值,有時會當成連續值處理等。所以很多情況下,我們要根據實際問題,進行不同的數據預處理。

二.特征選擇

不同的特征對模型的影響程度不同,我們要自動地選擇出對問題重要的一些特征,移除與問題相關性不是很大的特征,這個過程就叫做特征選擇。特征的選擇在特征工程中十分重要,往往可以直接決定最後模型訓練效果的好壞。常用的特征選擇方法有:過濾式(filter)、包裹式(wrapper)、嵌入式(embedding)。

1.過濾式

過濾式特征選擇是通過評估每個特征和結果的相關性,來對特征進行篩選,留下相關性最強的幾個特征。核心思想是:先對數據集進行特征選擇,然後再進行模型的訓練過濾式特征選擇的優點是思路簡單,往往通過Pearson相關系數法、方差選擇法、互信息法等方法計算相關性,然後保留相關性最強的N個特征,就可以交給模型訓練;缺點是沒有考慮到特征與特征之間的相關性,從而導致模型最後的訓練效果沒那麽好。

2.包裹式

包裹式特征選擇是把最終要使用的機器學習模型、評測性能的指標作為特征選擇的重要依據,每次去選擇若幹特征,或是排除若幹特征。通常包裹式特征選擇要比過濾式的效果更好,但由於訓練過程時間久,系統的開銷也更大。最典型的包裹型算法為遞歸特征刪除算法,其原理是使用一個基模型(如:隨機森林、邏輯回歸等)進行多輪訓練,每輪訓練結束後,消除若幹權值系數較低的特征,再基於新的特征集進行新的一輪訓練。

3.嵌入式

嵌入式特征選擇法是根據機器學習的算法、模型來分析特征的重要性,從而選擇最重要的N個特征。與包裹式特征選擇法最大的不同是,嵌入式方法是將特征選擇過程與模型的訓練過程結合為一體,這樣就可以快速地找到最佳的特征集合,更加高效、快捷。常用的嵌入式特征選擇方法有基於正則化項(如:L1正則化)的特征選擇法和基於樹模型的特征選擇法(如:GBDT)。

三.降維

如果拿特征選擇後的數據直接進行模型的訓練,由於數據的特征矩陣維度大,可能會存在數據難以理解、計算量增大、訓練時間過長等問題,因此我們要對數據進行降維。降維是指把原始高維空間的特征投影到低維度的空間,進行特征的重組,以減少數據的維度。降維與特征最大的不同在於,特征選擇是進行特征的剔除、刪減,而降維是做特征的重組構成新的特征,原始特征全部“消失”了,性質發生了根本的變化。常見的降維方法有:主成分分析法(PCA)和線性判別分析法(LDA)。

1.主成分分析法

主成分分析法(PCA)是最常見的一種線性降維方法,其要盡可能在減少信息損失的前提下,將高維空間的數據映射到低維空間中表示,同時在低維空間中要最大程度上的保留原數據的特點。主成分分析法本質上是一種無監督的方法,不用考慮數據的類標,它的基本步驟大致如下:

(a)數據中心化(每個特征維度減去相應的均值)

(b)計算協方差矩陣以及它的特征值和特征向量

(c)將特征值從大到小排序並保留最上邊的N個特征

(d)將高維數據轉換到上述N個特征向量構成的新的空間中

此外,在把特征映射到低維空間時要註意,每次要保證投影維度上的數據差異性最大(也就是說投影維度的方差最大)。我們可以通過下圖來理解這一過程:

技術分享圖片

2.線性判別分析法

線性判別分析法(LDA)也是一種比較常見的線性降維方法,但不同於PCA的是,它是一種有監督的算法,也就是說它數據集的每個樣本會有一個輸出類標。線性判別算法的核心思想是,在把數據投影到低維空間後,希望同一種類別數據的投影點盡可能的接近,而不同類別數據的類別中心之間的距離盡可能的遠。也就是說LDA是想讓降維後的數據點盡可能地被區分開。其示例圖如下所示:

技術分享圖片

本文為大家總結了特征工程中較為常用的一些方法,可以使用sklearn實現具體的代碼操作,具體參考skearn官方網址:

http://scikit-learn.org/stable/modules/preprocessing.html#preprocessing。

微信原文:https://mp.weixin.qq.com/s?__biz=MzAxMjMwODMyMQ==&mid=2456336588&idx=1&sn=edf3cbf25067f6623589c37790e4eee2&chksm=8c2fc2c2bb584bd468b3cad0cbe7b5a810de7656e8d75a5a10043102b0a078927d80bdd56480&mpshare=1&scene=1&srcid=0924bcrQwAmipReIDW2BIJXK#rd

特征工程