1. 程式人生 > >1. 特徵工程之特徵預處理

1. 特徵工程之特徵預處理

1. 前言

“資料決定了機器學習的上限,而演算法只是儘可能逼近這個上限”,這裡的資料指的就是經過特徵工程得到的資料。特徵工程指的是把原始資料轉變為模型的訓練資料的過程,它的目的就是獲取更好的訓練資料特徵,使得機器學習模型逼近這個上限。特徵工程能使得模型的效能得到提升,有時甚至在簡單的模型上也能取得不錯的效果。特徵工程在機器學習中佔有非常重要的作用,主要包括資料與特徵預處理、特徵選擇和資料的降維三部分。接下去會通過3篇文章對這三方面進行介紹。今天首先講講資料與特徵的預處理。

2. 資料與特徵預處理

資料與特徵預處理也成為特徵提取,主要是從會結構化的資料中金鍊的提取出有用的特徵,資料與特徵的預處理包括:

  1. 資料選擇、清洗、取樣
    1. 特徵預選擇,去掉類似ID的相關度為0的特徵。
    2. 資料清洗,填充缺失值、去掉異常值(離群點、髒資料),預設值極多的欄位考慮不用。
    3. 取樣:針對正負樣本不平衡的情況,可以通過上下采樣,和改變權重來處理。
    4. 資料格式化,比如文字處理的時候,去掉文字不相關的,符號和標點,處理大小寫,字型編碼問題。
    5. 特徵的擴充,例如,可以加入天氣溫度等特徵,有時序性的問題,可以shift聯絡前後幾天,增加時序特徵,還有特徵重新組合,特徵的拆分,one-hot編碼。
  2. 不同型別資料的特徵處理
    1. 數值型:幅度調整/歸一化、log等變化、統計值(例如max、min、mean、std)、離散化、分桶等
    2. 類別型:one-hot編碼,複雜的多欄位合併成精簡的少欄位等
    3. 時間型:提取出連續值的持續時間和間隔時間;提取出離散值的“年”、“月”、“日”、“一年中哪個星期/季度”、“一週中的星期幾”、“工作日/週末”等資訊
    4. 文字型:使用TF-IDF特徵
    5. 統計型:加減平均、分位線、次序、比例
  • 對資料進行預處理,可提高資料質量,提高挖掘質量。對資料進行清洗可填充缺失值、光滑噪聲資料,識別和刪除離群點資料,保證資料的一致性;
  • 使用正確的取樣方法可解決因資料不平衡帶來的預測偏差;
  • 對不同的資料型別進行不同的特徵處理有助於提高特徵的可用性,例如對數值型資料進行歸一化可將資料轉化到統一量綱下;對類別型資料,可用one-hot編碼方法將類別資料數字化,數字化特徵之後可更用來計算距離、相似性等;可從時間型資料當中提取中更多的時間特徵,例如年、月和日等,這些特徵對於業務場景以及模型的預測往往有很大的幫助。統計型特徵處理有助於從業務場景中挖掘更豐富的資訊。

3. 處理不平衡資料

之前的處理不平衡資料已經進行了詳細的介紹,本文在簡單的描述下。

處理不平衡資料一般是兩種方法:權重法或者取樣法

權重法:是比較簡單的方法,我們可以對訓練集裡的每個類別加一個權重class weight。如果該類別的樣本數多,那麼它的權重就低,反之則權重就高。如果更細緻點,我們還可以對每個樣本加權重sample weight,思路和類別權重也是一樣,即樣本數多的類別樣本權重低,反之樣本權重高。sklearn中,絕大多數分類演算法都有class weight和 sample weight可以使用。

取樣法常用的也有兩種思路,

  • 第一種是對類別樣本數多的樣本做子取樣, 比如訓練集裡A類別樣本佔90%,B類別樣本佔10%。那麼我們可以對A類的樣本子取樣,直到子取樣得到的A類樣本數和B類別現有樣本一致為止,這樣我們就只用子取樣得到的A類樣本數和B類現有樣本一起做訓練集擬合模型。
  • 第二種思路是對類別樣本數少的樣本做過取樣, 還是上面的例子,我們對B類別的樣本做過取樣,直到過取樣得到的B類別樣本數加上B類別原來樣本一起和A類樣本數一致,最後再去擬合模型。

4. 異常值清洗

  1. 是基於統計學的方法來處理異常資料,這種方法一般會構建一個概率分佈模型,並計算物件符合該模型的概率,把具有低概率的物件視為異常點。Q1=25%,Q3=75%,IQ=Q3-Q
    1,Q1-1.5IQ,Q1-3IQ,Q3+1.5IQ,Q3+3IQ算成離群點
  2. 是基於聚類的方法來做異常點檢測。這個很好理解,由於大部分聚類演算法是基於資料特徵的分佈來做的,通常如果我們聚類後發現某些聚類簇的資料樣本量比其他簇少很多,而且這個簇裡資料的特徵均值分佈之類的值和其他簇也差異很大,這些簇裡的樣本點大部分時候都是異常點。比如我之前講到的BIRCH聚類演算法原理和DBSCAN密度聚類演算法都可以在聚類的同時做異常點的檢測
  3. 是基於專門的異常點檢測演算法來做。這類演算法的代表是One Class SVM和Isolation Forest.

5. 資料預處理

5.1 無量綱化

5.1.1 標準化

標準化需要計算特徵的均值標準差

5.1.2 區間縮放法

區間縮放法的思路有多種,常見的一種為利用兩個最值進行縮放

5.1.3 標準化與歸一化的區別

標準化:是依照特徵矩陣的列處理資料,其通過求z-score的方法,將樣本的特徵值轉換到同一量綱下。
歸一化:是依照特徵矩陣的行處理資料,其目的在於樣本向量在點乘運算或其他核函式計算相似性時,擁有統一的標準,也就是說都轉化為“單位向量”。

5.2 對定量特徵二值化

定量特徵二值化的核心在於設定一個閾值,大於閾值的賦值為1,小於等於閾值的賦值為0

5.3 對定性特徵啞編碼

OneHotEncoder,假設有N種定性值,則將這一個特徵擴充套件為N種特徵,當原始特徵值為第i種定性值時,第i個擴充套件特徵賦值為1,其他擴充套件特徵賦值為0。啞編碼的方式相比直接指定的方式,不用增加調參的工作,對於線性模型來說,使用啞編碼後的特徵可達到非線性的效果。

5.4 缺失值計算

使用preproccessing庫的Imputer類對資料進行缺失值計算

  1. 缺失值比例超過50%直接丟棄
  2. 如果是連續值,那麼一般有兩種選擇,一是選擇所有有該特徵值的樣本,然後取平均值,來填充缺失值,另一種是取中位數來填充缺失值
  3. 如果是離散值,則一般會選擇所有有該特徵值的樣本中最頻繁出現的類別值,來填充缺失值。

5.5 資料變換

常見的資料變換有基於多項式的、基於指數函式的、基於對數函式的

6. 特徵工程的Roadmap

image

7. 總結

簡單的說,特徵工程是能夠將資料像藝術一樣展現的技術。因為好的特徵工程很好的混合了專業領域知識、直覺和基本的數學能力。但是最有效的資料呈現其實並不涉及任何的資料運算。

本質上來說,呈現給演算法的資料應該能擁有基本資料的相關結構或屬性。當你做特徵工程時,其實是將資料屬性轉換為資料特徵的過程,屬性代表了資料的所有維度,在資料建模時,如果對原始資料的所有屬性進行學習,並不能很好的找到資料的潛在趨勢,而通過特徵工程對你的資料進行預處理的話,你的演算法模型能夠減少受到噪聲的干擾,這樣能夠更好的找出趨勢。事實上,好的特徵甚至能夠幫你實現使用簡單的模型達到很好的效果。

(歡迎轉載,轉載請註明出處。歡迎溝通交流: [email protected]