1. 程式人生 > >資料預處理--缺失值和異常值的處理

資料預處理--缺失值和異常值的處理

處理缺失資料的方法

  1)用平均值、中值、分位數、眾數、隨機值等替代。
  如果預計該變數對於學習模型效果影響不大,可以對unknown值賦眾數,這裡認為變數都對學習模型有較大影響,效果一般,因為等於人為增加了噪聲,不建議採取此法。
  數值型的話,均值和近鄰或許是更好的方法。做成啞變數更適合分類、順序型變數。

  2)用其他變數做預測模型來算出缺失變數。
  效果比方法1略好。有一個根本缺陷,如果其他變數和缺失變數無關,則預測的結果無意義。如果預測結果相當準確,則又說明這個變數是沒必要加入建模的。一般情況下,介於兩者之間。
  可以使用資料完整的行作為訓練集,以此來預測缺失值。又由於sklearn的模型只能處理數值變數,需要先將分類變數數值化,然後進行預測。
  一般使用KNN, Matrix completion等方法預測。

  3)最精確的做法,把變數對映到高維空間。
  比如性別,有男、女、缺失三種情況,則對映成3個變數:是否男、是否女、是否缺失。連續型變數也可以這樣處理。比如Google、百度的CTR預估模型,預處理時會把所有變數都這樣處理,達到幾億維。這樣做的好處是完整保留了原始資料的全部資訊、不用考慮缺失值、不用考慮線性不可分之類的問題。缺點是計算量大大提升。
  而且只有在樣本量非常大的時候效果才好,否則會因為過於稀疏,效果很差。
  連續變數這麼map豈不會產生超多緯數的data?這種也叫one hot. 把取值變成離散特徵。

  4)有時還可以用特殊值標記, 引入虛擬變數(dummy variable)來表徵是否有缺失,是否有補全。

  5)有時還可忽略該行資料。
  有一些模型,如隨機森林,自身能夠處理資料缺失的情況,在這種情況下不需要對缺失資料做任何的處理,這種做法的缺點是在模型的選擇上有侷限。

  6)刪除。
  最簡單最直接的方法,很多時候也是最有效的方法,這種做法的缺點是可能會導致資訊丟失。
  對於unknown值數量較少的變數可以選擇刪除。
  刪除有缺失資料的樣本,刪除有過多缺失資料的特徵。


異常值(outlier)

  異常值往往使模型訓練中出現問題。

  與大多數值差別很大的值。在機器學習中,下列都是異常值:
  1)高絕對值的權重。
  2)與實際值差距過大的預測值。
  3)比平均值多大約 3 個標準差的輸入資料的值。