特徵工程(特徵選擇,表達,預處理)

2021-09-13 13:25:00 字數 3471 閱讀 6618

首先是找到該領域懂業務的專家,讓他們給一些建議。比如我們需要解決乙個藥品療效的分類問題,那麼先找到領域專家,向他們諮詢哪些因素(特徵)會對該藥品的療效產生影響,較大影響的和較小影響的都要。這些特徵就是我們的特徵的第一候選集。

特徵選擇的方法一般分三類:

包裝法:根據目標函式,通常是**效果評分,每次選擇部分特徵,或者排除部分特徵。

嵌入法:先使用某些機器學習的演算法和模型進行訓練,得到各個特徵的權值係數,根據權值係數從大到小來選擇特徵。類似於過濾法,但是它是通過機器學習訓練來確定特徵的優劣,而不是直接從特徵的一些統計學指標來確定特徵的優劣。

2.1 過濾法選擇特徵

在沒有什麼思路的 時候,可以優先使用卡方檢驗和互資訊來做特徵選擇。

2.2 包裝法選擇特徵

最常用的包裝法是遞迴消除特徵法(recursive feature elimination,以下簡稱rfe)。遞迴消除特徵法使用乙個機器學習模型來進行多輪訓練,每輪訓練後,消除若干權值係數的對應的特徵,再基於新的特徵集進行下一輪訓練。在sklearn中,可以使用rfe函式來選擇特徵。

下面以經典的svm-rfe演算法來討論這個特徵選擇的思路。這個演算法以支援向量機來做rfe的機器學習模型選擇特徵。它在第一輪訓練的時候,會選擇所有的特徵來訓練,得到了分類的超平面wx˙+b=0後,如果有n個特徵,那麼rfe-svm會選擇出w中分量的平方值wi^2 最小的那個序號i對應的特徵,將其排除,在第二類的時候,特徵數就剩下n-1個了,我們繼續用這n-1個特徵和輸出值來訓練svm,同樣的,去掉wi^2最小的那個序號i對應的特徵。以此類推,直到剩下的特徵數滿足我們的需求為止。

2.3 嵌入法選擇特徵

嵌入法也是用機器學習的方法來選擇特徵,但是它和rfe的區別是它不是通過不停的篩掉特徵來進行訓練,而是使用的都是特徵全集。

最常用的是使用l1正則化和l2正則化來選擇特徵。正則化懲罰項越大,那麼模型的係數就會越小。當正則化懲罰項大到一定的程度的時候,部分特徵係數會變成0,當正則化懲罰項繼續增大到一定程度時,所有的特徵係數都會趨於0. 但是我們會發現一部分特徵係數會更容易先變成0,這部分係數就是可以篩掉的。也就是說,我們選擇特徵係數較大的特徵。常用的l1正則化和l2正則化來選擇特徵的基學習器是邏輯回歸。

尋找高階特徵最常用的方法有:

尋找高階特徵的方法遠不止於此,它需要你根據你的業務和模型需要而得,而不是隨便的兩兩組合形成高階特徵,這樣容易導致特徵**,反而沒有辦法得到較好的模型。經驗是聚類的時候高階特徵盡量少一點,分類回歸的時候高階特徵適度的多一點。

大部分機器學習模型在擬合前需要所有的特徵都有值,不能是空或者null。

處理缺失值首先要看該特徵是連續值還是離散值。

離散值:

有些特徵的預設取值比較特殊,需要做了處理後才能用於演算法,比如日期時間(如20190324)和地理特徵(如「廣州市海珠區xx街道xx號」)。

2.1 時間原始特徵

2.2 地理特徵有很多機器學習演算法只能處理連續值特徵,不能處理離散值特徵,比如線性回歸,邏輯回歸等。

3.1 one-hot 編碼(encoding)

比如某特徵的取值是高,中和低,那麼就可以建立三個取值為0或者1的特徵,將高編碼為1,0,0這三個特徵;中編碼為0,1,0這三個特徵;低編碼為0,0,1這三個特徵。也就是之前的乙個特徵被轉化為了三個特徵。(連續化可理解為特徵one-hot之後變到了[0,1]區間)

3.2 特徵嵌入(embedding)

一般用於深度學習中。比如對於使用者的id這個特徵,如果要使用one-hot編碼,維度會**,如果使用特徵嵌入維度會低很多。對於每個要嵌入的特徵,會有乙個特徵嵌入矩陣,這個矩陣的行很大,對應該特徵的數目(比如使用者的id,如果有100萬個,那麼嵌入的特徵矩陣是100萬行),列一般較小(比如取為20),這樣每個使用者的id就轉化為了乙個20維的特徵向量。

對於連續特徵,有時候我們也可以將其做離散化處理。這樣特徵變得高維稀疏,方便一些演算法的處理。

對常用的方法是根據閾值進行分組,比如我們根據連續值特徵的分位數,將該特徵分為高,中和低三個特徵。將分位數從0-0.3的設定為高,0.3-0.7的設定為中,0.7-1的設定為高。

1.特徵的標準化與歸一化

1.1 z-score標準化

基於正態分佈的假設,將資料變換為均值為0、標準差為1的標準正態分佈。但即使資料不服從正態分佈,也可以用此法。特別適用於資料的最大值和最小值未知,或存在孤立點。

具體的方法是求出樣本特徵x的均值mean和標準差std,然後用(x-mean)/std來代替原特徵。這樣特徵就變成了均值為0,方差為1了。

1.2 max-min標準化(也稱離差標準化)

歸一化的常用方法,使特徵值對映到[0,1]之間,可以使資料處理過程更加便捷快速。經過歸一化處理的資料,處於同一數量級,可以消除指標之間的量綱和量綱單位的影響,提高不同資料指標之間的可比性。

具體的方法是求出樣本特徵x的最大值max和最小值min,然後用(x-min)/(max-min)來代替原特徵。如果我們希望將資料對映到任意乙個區間[a,b],而不是[0,1],那麼用(x-min)(b-a)/(max-min)+a來代替原特徵即可。

這種方法的問題就是如果測試集或者**資料裡的特徵有小於min,或者大於max的資料,會導致max和min發生變化,需要重新計算。所以實際演算法中, 除非你對特徵的取值區間有需求,否則max-min標準化沒有 z-score標準化好用。

1.3 l1/l2範數標準化

如果我們只是為了統一量綱,那麼通過l2範數整體標準化也是可以的,具體方法是求出每個樣本特徵向量

此外,經常我們還會用到中心化,主要是在pca降維的時候,此時我們求出特徵x的平均值mean後,用x-mean代替原特徵,也就是特徵的均值變成了0, 但是方差並不改變。

雖然大部分機器學習模型都需要做標準化和歸一化,也有不少模型可以不做做標準化和歸一化,主要是基於概率分布的模型,比如決策樹大家族的cart,隨機森林等。當然此時使用標準化也是可以的,大多數情況下對模型的泛化能力也有改進。

2.異常特徵樣本的清洗

3.處理不平衡資料

做分類演算法訓練時,如果訓練集裡的各個類別的樣本數量不是大約相同的比例,就需要處理樣本不平衡問題。如果不處理,那麼擬合出來的模型對於訓練集中少樣本的類別泛化能力會很差。舉個例子,我們是乙個二分類問題,如果訓練集裡a類別樣本佔90%,b類別樣本佔10%。 而測試集裡a類別樣本佔50%, b類別樣本佔50%, 如果不考慮類別不平衡問題,訓練出來的模型對於類別b的**準確率會很低,甚至低於50%。

一般是兩種方法:權重法或者取樣法。

以上兩種取樣法的問題是改變了訓練集的分布,可能導致泛化能力差。所以有的演算法可以通過其他方法來避免這個問題,比如smote演算法通過人工合成的方法來生成少類別的樣本。方法是對於乙個缺少樣本的類別,隨機找出幾個該類別的樣本,再找出最靠近這些樣本的若干個該類別的樣本,組成乙個候選合成集合,然後在這個集合中不停地選擇距離較近的兩個樣本,在這兩個樣本之間,比如說中點,構造乙個新的該類別的樣本。比如該類別的候選合成集合有兩個樣本(x1,y),(x2,y),那麼smote取樣後,可以得到乙個新的訓練樣本((x1+x2)/2,y),通過這種方法就可以得到不改變訓練集分布的新樣本,讓訓練集中各個類別的樣本數趨於平衡。

參考:特徵選擇(

特徵表達(

特徵預處理(

特徵預處理,特徵選擇

統一量綱 特徵規格不一樣,不能放在一起比較。主要看模型,比如樹模型就不太需要,而計算距離之類的模型,或者神經網路就需要 主要有標準化,區間放縮,歸一化。標準化 標準化,均值為0,方差為1 from sklearn.preprocessing import standardscaler 標準化,返回值...

特徵工程之特徵預處理

概念 特徵預處理是什麼呢?特徵預處理是通過統計方法 數學方法 將資料轉換成演算法要求的資料,所以特徵預處理也叫做資料預處理。下面是幾種資料預處理的方法 1 數值型資料 標準縮放 1 歸一化2 標準化 2 類別型資料 one hot編碼 3 時間類別 時間的劃分 下面介紹歸一化和標準化歸一化 歸一化 ...

特徵工程之特徵預處理

在前面我們分別討論了特徵工程中的特徵選擇與特徵表達,本文我們來討論特徵預處理的相關問題。主要包括特徵的歸一化和標準化,異常特徵樣本清洗與樣本資料不平衡問題的處理。由於標準化和歸一化這兩個詞經常混用,所以本文不再區別標準化和歸一化,而通過具體的標準化和歸一化方法來區別具體的預處理操作。z score標...