現實世界中的數據往往非常雜亂,未經處理的原始數據中某些屬性數據缺失是經常出現的情況。另外,在做特征工程時經常會有些樣本的某些特征無法求出。路漫漫其修遠兮,數據還是要繼續挖的,本文介紹幾種處理數據中缺失值的主要方法。
作者:無影隨想
時間:2016年1月。
出處:http://www.zhaokv.com/2016/01/missing-values.html
聲明:版權所有,轉載請聯繫作者並註明出處
現實世界中的數據往往非常雜亂,未經處理的原始數據中某些屬性數據缺失是經常出現的情況。另外,在做特征工程時經常會有些樣本的某些特征無法求出。路漫漫其修遠兮,數據還是要繼續挖的,本文介紹幾種處理數據中缺失值的主要方法。
一、常用方法
1. 刪除
最簡單的方法是刪除,刪除屬性或者刪除樣本。如果大部分樣本該屬性都缺失,這個屬性能提供的信息有限,可以選擇放棄使用該維屬性;如果一個樣本大部分屬性缺失,可以選擇放棄該樣本。雖然這種方法簡單,但只適用於數據集中缺失較少的情況。
2. 統計填充
對於缺失值的屬性,尤其是數值類型的屬性,根據所有樣本關於這維屬性的統計值對其進行填充,如使用平均數、中位數、眾數、最大值、最小值等,具體選擇哪種統計值需要具體問題具體分析。另外,如果有可用類別信息,還可以進行類內統計,比如身高,男性和女性的統計填充應該是不同的。
3. 統一填充
對於含缺失值的屬性,把所有缺失值統一填充為自定義值,如何選擇自定義值也需要具體問題具體分析。當然,如果有可用類別信息,也可以為不同類別分別進行統一填充。常用的統一填充值有:“空”、“0”、“正無窮”、“負無窮”等。
4. 預測填充
我們可以通過預測模型利用不存在缺失值的屬性來預測缺失值,也就是先用預測模型把數據填充後再做進一步的工作,如統計、學習等。雖然這種方法比較複雜,但是最後得到的結果比較好。
二、具體分析
上面兩次提到具體問題具體分析,為什麼要具體問題具體分析呢?因為屬性缺失有時並不意味著數據缺失,缺失本身是包含信息的,所以需要根據不同應用場景下缺失值可能包含的信息進行合理填充。下麵通過一些例子來說明如何具體問題具體分析,仁者見仁智者見智,僅供參考:
- “年收入”:商品推薦場景下填充平均值,借貸額度場景下填充最小值;
- “行為時間點”:填充眾數;
- “價格”:商品推薦場景下填充最小值,商品匹配場景下填充平均值;
- “人體壽命”:保險費用估計場景下填充最大值,人口估計場景下填充平均值;
- “駕齡”:沒有填寫這一項的用戶可能是沒有車,為它填充為0較為合理;
- ”本科畢業時間”:沒有填寫這一項的用戶可能是沒有上大學,為它填充正無窮比較合理;
- “婚姻狀態”:沒有填寫這一項的用戶可能對自己的隱私比較敏感,應單獨設為一個分類,如已婚1、未婚0、未填-1。