1. 程式人生 > >機器學習---特徵選擇

機器學習---特徵選擇

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

特徵工程,是指用一系列工程化的方式從原始資料中篩選出更好的資料特徵,以提升模型的訓練效果。業內有一句廣為流傳的話是:資料和特徵決定了機器學習的上限而模型和演算法是在逼近這個上限而已。由此可見,好的資料和特徵是模型和演算法發揮更大的作用的前提。

特徵工程通常包括資料預處理、特徵選擇、降維等環節。如下圖所示:

一.資料預處理

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

  • 歸一化

歸一化是對資料集進行區間縮放

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

  • 標準化

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

  • 離散化

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

  • 二值化

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

  • 啞編碼

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

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

二.特徵選擇

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

  1. 過濾式

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

  1. 包裹式

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

  1. 嵌入式

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

三.降維

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

常見的降維方法有:主成分分析法(PCA)和線性判別分析法(LDA)

  • 主成分分析法

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

  • 資料中心化(每個特徵維度減去相應的均值)
  • 計算協方差矩陣以及它的特徵值和特徵向量
  • 將特徵值從大到小排序並保留最上邊的N個特徵
  • 將高維資料轉換到上述N個特徵向量構成的新的空間中

此外,在把特徵對映到低維空間時要注意,每次要保證投影維度上的資料差異性最大(也就是說投影維度的方差最大)。我們可以通過圖1-5來理解這一過程:

  • 線性判別分析法

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

以上為大家總結了常用的一些特徵工程方法,我們可以使用sklearn完成幾乎所有特徵處理的工作,具體參考: