為什麼要處理缺失值
這一段完全是廢話了。含有缺失資料的樣本,你要麼刪了,要了就填充上什麼值。刪了就會損失一部分的樣本資訊,填充要是填充的不合適,會給樣本增加噪音。
所以這就是一個選擇的問題:
- 選擇刪除還是填充;
- 選擇填充方式
處理缺失值的8種方法
這裡先說一下,我總結了自己在競賽中的操作,以及一些大佬的處理方法,建議處理缺失值的方法是:
- 先嚐試刪除有缺失項的資料,然後訓練模型,先把baseline做出來;
- 然後會依次嘗試:特殊值填充,(特殊)平均值填充和最近鄰法。
1. 不處理
-
補齊處理只是將未知值補以我們的主觀估計值,不一定完全符合客觀事實,在對不完備資訊進行補齊處理的同時,我們或多或少地改變了原始的資訊系統。
-
對空值不正確的填充往往將新的噪聲引入資料中,使挖掘任務產生錯誤的結果。因此,在許多情況下,我們還是希望在保持原始資訊不發生變化的前提下對資訊系統進行處理。
但是訓練模型的時候,可能不處理並不能進行。所以一般不會選擇不處理。
2. 特殊值填充
這個是認為資料的空值也是具有一定的資訊的,它之所以為空,是因為它不同於其他的任何資料。所以將空值作為一種特殊的屬性值來處理,它不同於其他的任何屬性值。如所有的空值都用“unknown”填充。
3. 平均值填充
- 如果空值是數值型的,就根據該屬性在其他所有物件的取值的平均值來填充該缺失的屬性值
- 如果空值是非數值型的,就根據統計學中的眾數原理,用該屬性在其他所有物件的取值次數最多的值(即出現頻率最高的值)來補齊該缺失的屬性值。
比方說,一個樣本的特徵a缺失了,那麼a就填充上所有樣本的特徵a的平均值。
此外有一種叫做條件平均值填充的方法,是隻考慮和缺失樣本具有相同特徵的樣本的平均值。比方說某一個樣本的特徵a缺失了,用和這個樣本的特徵b相同的所有樣本的特徵a的平均值來填充這個缺失值。(因為這些樣本和缺失資料的樣本具有相同的特徵,所有認為他們會更為相似)。
4. 熱卡填充
對於一個包含空值的物件,熱卡填充法在完整資料中找到一個與它最相似的物件,然後用這個相似物件的值來進行填充。
【優缺點】
- 優點:該方法概念上很簡單,且利用了資料間的關係來進行空值估計
- 缺點:在於難以定義相似標準,主觀因素較多。
5. 最近鄰法
先根據歐式距離或相關分析來確定距離具有缺失資料樣本最近的K個樣本,將這K個值加權平均來估計該樣本的缺失資料。
這個方法與熱卡填充有些相似,如果最近鄰法僅僅考慮最近的一個樣本,那麼就會退化成熱卡填充。不過最近鄰法和熱卡填充面臨同樣的問題,如何衡量相似度。
6. 使用所有可能的值填充
用空缺屬性值的所有可能的屬性取值來填充,能夠得到較好的補齊效果。
但是,當資料量很大或者遺漏的屬性值較多時,其計算的代價很大,可能的測試方案很多。
7. 模型預測
基於完整的資料集,建立預測模型。對於包含空值的物件,將已知屬性值代入方程來估計未知屬性值,以此估計值來進行填充。
其實就是假設特徵之間也存在一定的關係,可以通過預測來得到缺失值。但是我個人不建議使用這個方法,因為有些麻煩,而且不確定這樣得到的填充值的效果。又可能出現模型過擬合等新問題。
8. 多重插補
這個我看大資料競賽中,並沒有大神做這個填充缺失項的。一般對於小資料會使用這個方法,因為多重插補會反覆訓練模型,然後評價模型的效果。因此需要大量的時間。
9. 人工填寫
在大資料中,個人不太推薦。。。