概述
在工程實踐中,我們得到的資料會存在有缺失值、重複值等,在使用之前需要進行資料預處理。資料預處理沒有標準的流程,通常針對不同的任務和資料集屬性的不同而不同。資料預處理的常用流程為:去除唯一屬性、處理缺失值、屬性編碼、資料標準化正則化、特徵選擇、主成分分析。
資料預處理方法
1. 去除唯一屬性
唯一屬性通常是一些 id 屬性,這些屬性並不能刻畫樣本自身的分佈規律,所以簡單地刪除這些屬性即可。
2. 處理缺失值
缺失值處理的三種方法:直接使用含有缺失值的特徵;刪除含有缺失值的特徵(該方法在包含缺失值的屬性含有大量缺失值而僅僅包含極少量有效值時是有效的);缺失值補全。
常見的缺失值補全方法:
- 均值插補
- 同類均值插補
- 建模預測
- 高維對映
- 多重插補
- 極大似然估計
- 壓縮感知和矩陣補全
均值插補
如果樣本屬性的距離是「可度量」的,則使用該屬性有效值的平均值來插補缺失的值;
如果的距離是「不可度量」的,則使用該屬性有效值的眾數來插補缺失的值。如果使用眾數插補,出現資料傾斜會造成什麼影響?
同類均值插補
首先將樣本進行分類,然後以該類中樣本的均值來插補缺失值。
建模預測
將缺失的屬性作為預測目標來預測,將資料集按照是否含有特定屬性的缺失值分為兩類,利用現有的機器學習演算法對待預測資料集的缺失值進行預測。
該方法的根本的缺陷是如果其他屬性和缺失屬性無關,則預測的結果毫無意義;但是若預測結果相當準確,則說明這個缺失屬性是沒必要納入資料集中的;一般的情況是介於兩者之間。
高維對映
將屬性對映到高維空間,採用獨熱碼編碼(one-hot)技術。將包含K個離散取值範圍的屬性值擴充套件為K+1個屬性值,若該屬性值缺失,則擴充套件後的第K+1個屬性值置為1。
這種做法是最精確的做法,保留了所有的資訊,也未新增任何額外資訊,若預處理時把所有的變數都這樣處理,會大大增加資料的維度。這樣做的好處是完整保留了原始資料的全部資訊、不用考慮缺失值;缺點是計算量大大提升,且只有在樣本量非常大的時候效果才好。
多重插補(MultipleImputation,MI)
多重插補認為待插補的值是隨機的,實踐上通常是估計出待插補的值,再加上不同的噪聲,形成多組可選插補值,根據某種選擇依據,選取最合適的插補值。
壓縮感知和矩陣補全
手動插補
插補處理只是將未知值補以我們的主觀估計值,不一定完全符合客觀事實。在許多情況下,根據對所在領域的理解,手動對缺失值進行插補的效果會更好。
特徵編碼
特徵二元化
特徵二元化的過程是將數值型的屬性轉換為布林值的屬性,設定一個閾值作為劃分屬性值為0和1的分隔點。
獨熱編碼(One-HotEncoding)
獨熱編碼採用N位狀態暫存器來對N個可能的取值進行編碼,每個狀態都由獨立的暫存器來表示,並且在任意時刻只有其中一位有效。
獨熱編碼的優點:能夠處理非數值屬性;在一定程度上擴充了特徵;編碼後的屬性是稀疏的,存在大量的零元分量。
資料標準化、正則化
資料標準化是將樣本的屬性縮放到某個指定的範圍。
資料標準化的原因:
某些演算法要求樣本具有零均值和單位方差;
需要消除樣本不同屬性具有不同量級時的影響:
- 數量級的差異將導致量級較大的屬性佔據主導地位;
- 數量級的差異將導致迭代收斂速度減慢;
- 依賴於樣本距離的演算法對於資料的數量級非常敏感。
min-max 標準化(歸一化)
對於每個屬性,設\min A和\max A分別為屬性A的最小值和最大值,將A的一個原始值x透過\max-\min標準化對映成在區間[0,1]中的值x^*,公式為:
\displaystyle x^*=\frac{x-x_{\min}}{x_{\max}-x_{\min}}
z-score 標準化(規範化)
基於原始資料的均值(mean)和標準差(standarddeviation)進行資料的標準化。將A的原始值x使用z-score
標準化到x^*。z-score
標準化方法適用於屬性A的最大值和最小值未知的情況,或有超出取值範圍的離群資料的情況。
\displaystyle x^*=\frac{x-\mu}{\sigma^2}\\{}\\ \mu^{(i)}=\frac{1}{N}\sum_{i=1}^Nx_i^{(j)}\\{}\\ \sigma^{(j)}=\sqrt{\frac{1}{N}\sum_{i=1}^N(x_i^{(j)}-\mu^{(j)})^2}
均值和標準差都是在樣本集上定義的,而不是在單個樣本上定義的。標準化是針對某個屬性的,需要用到所有樣本在該屬性上的值。
正則化
資料正則化是將樣本的某個範數(如L1範數)縮放到到位1,正則化的過程是針對單個樣本的,對於每個樣本將樣本縮放到單位範數。
設資料集:
\displaystyle D=\{(\vec x_1,y_1),(\vec x_2,y_2),\cdots,(\vec x_N,y_N)\}\\{}\\ \vec x_i=(x_i^{(1)},x_i^{(2)},\cdots,x_i^{(d)})^T
對樣本首先計算L_p範數:
\displaystyle L_p(\vec x_i)=\left(\bigg|x_i^{(1)}\bigg|^p+\bigg|x_i^{(2)}\bigg|^p+\cdots+\bigg|x_i^{(d)}\bigg|^p\right)^{\frac{1}{p}}
正則化後的結果為:每個屬性值除以其L_p範數:
\displaystyle \left(\frac{x_i^{(1)}}{L_p(\vec x_i)},\frac{x_i^{(2)}}{L_p(\vec x_i)},\cdots,\frac{x_i^{(d)}}{L_p(\vec x_i)}\right)^T
特徵選擇(降維)
從給定的特徵集合中選出相關特徵子集的過程稱為特徵選擇。
進行特徵選擇的兩個主要原因是:
減輕維數災難問題;
降低學習任務的難度。
進行特徵選擇必須確保不丟失重要特徵。
常見的特徵選擇型別分為三類:「過濾式(filter)」、「包裹式(wrapper)」、「嵌入式(embedding)」。
過濾式選擇
該方法先對資料集進行特徵選擇,然後再訓練學習器。特徵選擇過程與後續學習器無關。「Relief」是一種著名的過濾式特徵選擇方法。
包裹式選擇
該方法直接把最終將要使用的學習器的效能作為特徵子集的評價原則。其優點是直接針對特定學習器進行最佳化,因此通常包裹式特徵選擇比過濾式特徵選擇更好,缺點是由於特徵選擇過程需要多次訓練學習器,故計算開銷要比過濾式特徵選擇要大得多。
嵌入式選擇
常見的降維方法:SVD、PCA、LDA
稀疏表示和字典學習
字典學習
學習一個字典,透過該字典將樣本轉化為合適的稀疏表示形式。
稀疏編碼
獲取樣本的稀疏表達。
本作品採用《CC 協議》,轉載必須註明作者和本文連結