1. 特征工程之特征預處理
2. 特征工程之特征選擇
1. 前言
“資料決定了機器學習的上限,而算法隻是盡可能逼近這個上限”,這裡的資料指的就是經過特征工程得到的資料。特征工程指的是把原始資料轉變為模型的訓練資料的過程,它的目的就是擷取更好的訓練資料特征,使得機器學習模型逼近這個上限。特征工程能使得模型的性能得到提升,有時甚至在簡單的模型上也能取得不錯的效果。特征工程在機器學習中占有非常重要的作用,主要包括資料與特征預處理、特征選擇和資料的降維三部分。接下去會通過3篇文章對這三方面進行介紹。今天首先講講資料與特征的預處理。
2. 資料與特征預處理
資料與特征預處理也稱為特征提取,主要是從非結構化的資料中提取出有用的特征并且進行一定的資料處理。資料與特征的預處理包括:
- 資料選擇、清洗、采樣
- 特征預選擇,去掉類似ID的相關度為0的特征。
- 資料清洗,填充缺失值、去掉異常值(離群點、髒資料),預設值極多的字段考慮不用。
- 采樣:針對正負樣本不平衡的情況,可以通過上下采樣,和改變權重來處理。
- 資料格式化,比如文本處理的時候,去掉文本不相關的,符号和标點,處理大小寫,字型編碼問題。
- 特征的擴充,例如,可以加入天氣溫度等特征,有時序性的問題,可以shift聯系前後幾天,增加時序特征,還有特征重新組合,特征的拆分,one-hot編碼。
- 不同類型資料的特征處理
- 數值型:幅度調整/歸一化、log等變化、統計值(例如max、min、mean、std)、離散化、分桶等
- 類别型:one-hot編碼,複雜的多字段合并成精簡的少字段等
- 時間型:提取出連續值的持續時間和間隔時間;提取出離散值的“年”、“月”、“日”、“一年中哪個星期/季度”、“一周中的星期幾”、“工作日/周末”等資訊
- 文本型:使用TF-IDF特征
- 統計型:加減平均、分位線、次序、比例
- 對資料進行預處理,可提高資料品質,提高挖掘品質。對資料進行清洗可填充缺失值、光滑噪聲資料,識别和删除離群點資料,保證資料的一緻性;
- 使用正确的采樣方法可解決因資料不平衡帶來的預測偏差;
- 對不同的資料類型進行不同的特征處理有助于提高特征的可用性,例如對數值型資料進行歸一化可将資料轉化到統一量綱下;對類别型資料,可用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. 異常值清洗
-
是基于統計學的方法來處理異常資料,這種方法一般會建構一個機率分布模型,并計算對象符合該模型的機率,把具有低機率的對象視為異常點。Q1=25%,Q3=75%,IQ=Q3-Q
1,Q1-1.5IQ,Q1-3IQ,Q3+1.5IQ,Q3+3IQ算成離群點
- 是基于聚類的方法來做異常點檢測。這個很好了解,由于大部分聚類算法是基于資料特征的分布來做的,通常如果我們聚類後發現某些聚類簇的資料樣本量比其他簇少很多,而且這個簇裡資料的特征均值分布之類的值和其他簇也差異很大,這些簇裡的樣本點大部分時候都是異常點。比如我之前講到的BIRCH聚類算法原理和DBSCAN密度聚類算法都可以在聚類的同時做異常點的檢測。
- 是基于專門的異常點檢測算法來做。這類算法的代表是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類對資料進行缺失值計算
- 缺失值比例超過50%直接丢棄
- 如果是連續值,那麼一般有兩種選擇,一是選擇所有有該特征值的樣本,然後取平均值,來填充缺失值,另一種是取中位數來填充缺失值
- 如果是離散值,則一般會選擇所有有該特征值的樣本中最頻繁出現的類别值,來填充缺失值。
5.5 資料變換
常見的資料變換有基于多項式的、基于指數函數的、基于對數函數的
6. 特征工程的Roadmap
7. 總結
簡單的說,特征工程是能夠将資料像藝術一樣展現的技術。因為好的特征工程很好的混合了專業領域知識、直覺和基本的數學能力。但是最有效的資料呈現其實并不涉及任何的資料運算。
本質上來說,呈現給算法的資料應該能擁有基本資料的相關結構或屬性。當你做特征工程時,其實是将資料屬性轉換為資料特征的過程,屬性代表了資料的所有次元,在資料模組化時,如果對原始資料的所有屬性進行學習,并不能很好的找到資料的潛在趨勢,而通過特征工程對你的資料進行預處理的話,你的算法模型能夠減少受到噪聲的幹擾,這樣能夠更好的找出趨勢。事實上,好的特征甚至能夠幫你實作使用簡單的模型達到很好的效果。