【機器學習】:特徵工程

      我總結了以下特徵工程的一些方法,好的數據和特徵往往在數據挖掘當中會給我們帶來更好的acc,尤其對於數據挖掘而言。數據決定了預測準確度的上線,而模型的目的則是去儘量逼近這個上限。由此可見,對數據進行特徵工程,擁有良好的數據是多麼的重要。

對於特徵工程而言,我們一般會對類別型數據或者數值型數據進行相應的編碼。下面我們首先來看看對類別型數據進行編碼:

一.one-hot編碼

形式:one-hot編碼是以one of k的形式。

用途:在所有的線性模型,nlp的詞彙也可以用這種方式進行編碼,樹模型不適合

優點:簡單,可以對所有類別型數據進行編碼

缺點:會帶來維度爆炸(如果屬性的類別過多,那麼經過one hot處理之後,會產生2^n個新的維度)和特徵稀疏(因爲會出現很多0)

實現方法:
1.在pandas中使用:get_dummies

2.在sklearn中使用OneHotEncode

 

如下圖所示:

 

二.Label Encoding 標籤編碼

形式:將每個類別數據使用獨立的數字IDj進行編碼

用途:在樹模型當中比較適合 

優點:簡單,不增加類別的維度

缺點:會改變原始標籤的類別次序,one-hot不會具有大小關係

實現方法;

sklearn的labelencoder

pandas中的factorize

如下圖所示:

 

在lightbgm和catboost當中會指定類別類型,當然在xgboost/lightbgm的後續版本當總已經不需要使用labelencoder,會自動對已經是數值型的類別數據進行相應的處理

三.順序編碼

 形式:按照類別的大小關係進行編碼

用途:在大部分場景都適用

優點;簡單,不會增加類別的維度

缺點:需要人工知識

實現方法:手動定義字典進行映射

使用代碼如下所示:

 

 四.Frequency Encoding, Count Encoding

 形式:按照類別出現的次數和頻率進行編碼(做的優先級低於前面的encoding)

用途:在大部分場景都適用

優點;簡單,可以統計類別的次數,從一列的角度進行統計,模型可以學習到頻率的信息

缺點:容易收到類別分佈帶來的影響,比如train 和test的類別分佈頻率是不一樣的,那麼對test預測結果可能就沒有那麼準確,acc不升反降。

實現方法:使用次數進行統計

使用代碼如下所示:

 

 五. Mean/Target Encoding

形式:將類別對應的標籤概率進行相應的編碼,比如某個country在某個target下出現的概率大小。example:

country爲china,target爲0或者1,那麼概率爲0.5 。如果target爲0,1,2,則概率爲1/3

用途:在大部分場景都適用

優點;讓模型能夠學習到標籤之間相互的一個信息

缺點:容易過擬合,因爲比如target只有一個數值,china對應的這一個數值1的概率也永遠爲1,相當於把country=china這個數值泄漏了出去。造成過擬合

實現方法:使用次數進行統計

 

 

下面我們進行數值型數據的特徵工程:

一.Round

形式:將數值進行縮放,取整

用途:在大部分場景都適用

優點:可以保留數值的大部分信息

 

二.數據的分箱

特點:將連續的特徵離散化 

備註:其實cart迴歸樹(決策樹/xgboost/gbdt當中均使用)自動也會幫我們形成一個最優的數據分箱策略,使用的是均方誤差來進行的衡量,有的時候可能還比我們手動做數據的分箱更加管用

代碼如下所示:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章