機器學習之數據預處理簡介
這次只是簡單介紹以下通用的數據預處理方式,之後會更加詳細的講解各種方法,標題如下:
- 背景
- 缺失值處理
- 連續特徵離散化
- 離散特徵編碼
- 歸一化和標準化
背景
在現實背景中,我們的數據集往往存在各種各樣的問題,如果不對數據進行預處理,模型的訓練就無法開始。
在對數據進行預處理階段我們往往要解決以下問題
- 數據中存在缺失值
- 連續特徵是否要離散化
- 離散特徵的編碼
- 特徵量綱不同,不具可比性
缺失值處理
由於各種各樣原因,現實中的許多數據集包含缺失數據,這樣的數據是無法直接用於訓練的,因此我們需要對缺失值進行處理。
最簡單粗暴的方法就是把含有缺失值的樣本丟棄,這樣可以避免人為填充帶來的雜訊。這樣做可能會丟失一些很重要的信息,特別是數據量不多或者數據價值很高的數據來說,直接丟棄就太浪費了。因此我們可以旋轉某種合適的策略對缺失值進行適當的填充。
一般來說,我們可以使用平均值、中值、分位數、眾數等替代。如果想要更好的填充效果,可以考慮利用無缺失值的數據建立模型,通過模型來選擇一個最適合的填充值,但如果缺失的屬性對於模型可有可無,那麼得出來的填充值也將不準確。我們還可以使用KNN來選擇最相似的樣本進行填充。除此以外,缺失信息也可以作為一種特殊的特徵表達,例如人的性別,男、女、不詳可能各自有著不同的含義。
連續特徵離散化
特徵可以被分為連續特徵和離散特徵,但有些時候我們可以會將連續特徵離散化,例如,如果我們只關心年齡是否大於18,那麼我們會將該特徵二值化。這樣不僅可以使得數據變得稀疏降低過擬合的情況,還可以加快學習的速度,並且令模型對異常數據不那麼敏感。離散化方法分為有監督和無監督兩類。
等寬、等頻的離散化方法是無監督方法的典型代表,根據使用者給定的寬度或頻數將連續的區間劃分成小的區間的方法對分布不均勻的數據不適用,對異常點比較敏感。無監督離散化方法中還有基於聚類分析的離散化,它通過對某一特徵的值進行聚類,由此得到離散區間的劃分。
有監督離散化的方法有基於熵的離散化方法,它是一種自頂向下分裂的離散化方法,它根據信息熵在所有可能的區間斷點中選取最優的劃分。
離散特徵編碼
特徵雖然分為連續特徵和離散特徵,但是計算機都是將所有特徵作為連續特徵處理,因此如果我們想使用離散特徵,必須對離散特徵進行獨熱編碼或啞編碼。假設我們把年齡劃分為[0,20),[20,40),[40,60),[60,+∞)四個區間並用0,1,2,3表示。使用獨熱編碼特徵會被編碼為
[0,20)1000[20,40)0100[40,60)0010[60,+∞)0001
如果是啞編碼則會編碼為
[0,20)100[20,40)010[40,60)001[60,+∞)000
具體選擇哪種編碼可以參照知乎中王贇的回答
如果你不使用regularization,那麼one-hot encoding的模型會有多餘的自由度。這個自由度體現在你可以把某一個分類型變數各個值對應的權重都增加某一數值,同時把另一個分類型變數各個值對應的權重都減小某一數值,而模型不變。在dummy encoding中,這些多餘的自由度都被統攝到intercept里去了。這麼看來,dummy encoding更好一些。
如果你使用regularization,那麼regularization就能夠處理這些多餘的自由度。此時,我覺得用one-hot encoding更好,因為每個分類型變數的各個值的地位就是對等的了。」
歸一化和標準化
歸一化和標準化都可以使特徵無量綱化,歸一化使得數據放縮在[0,1]之間並且使得特徵之間的權值相同,改變了原數據的分布,而標準化將不同特徵維度的伸縮變換使得不同度量之間的特徵具有可比性。同時不改變原始數據的分布。常見的歸一化方法有min-max標準化和z-score標準化。
min-max標準化根據特徵的最大最小值將數據放縮到[0,1]之間z-score標準化利用數據的均值和標準差將數據變為標準正態分布
推薦閱讀:
※Learning Explanatory Rules from Noisy Data 閱讀筆記2
※優秀的機器學習模型,可以用一輩子
※台灣李宏毅老師機器學習ML 第一課 回歸Regression
※谷歌今日上線基於TensorFlow的機器學習速成課程(免費中文版)
※機器學習之邏輯回歸分類
TAG:機器學習 |