機器學習-特徵工程-填補缺失值

Introduction

  • 現實中所蒐集的數據不可能完美,往往伴隨著缺失值的存在
    處理方法通常為:
  1. 直接將含有缺失值的樣本刪除
  2. 直接將含有過多缺失值的特徵列刪除
  3. 使用sklearn.impute.SimpleImputer將均值、中位數、眾數、常數填補數據
    • 專門用作填補缺失值的類
  4. 使用隨機森林回歸填補缺失值

使用特定值填補缺失值

1
2
3
from sklearn.impute import SimpleImputer
imp_mean = SimpleImputer(missing_values = np.nan, strategy="mean",copy=True)
x_missing_mean = imp_mean.fit_transform(X_missing)
  • X_missing:是含有缺失值的pandas.dataframe或是numpy.ndarray類型的數據
    • x_missing_mean:是使用均值填補的結果
      • 返回的類型為numpy.ndarray類型
  • strategy參數:可為"mean"(平均數[預設])、"median"(中位數)、"most_frequent"(眾數[可用於填充文字])、"constant"(常數[可用於填充文字])
    • 若使用"constant"(常數)進行填補,則需再指定fill_value參數為何值
      • fill_value = 0:使用0進行填補
  • copy: 預設為True:創建特徵矩陣的副本 ; 設為False時,會將缺失值直接填補到原本的特徵矩陣中去

判斷是否填補完成

  1. 使用pandas.DataFrame.isnull()判斷是否填補完成
  2. 加總每一列的結果確定皆為0,則代表填補完成
1
pd.DataFrame(x_missing_mean).isnull().sum()

使用隨機森林回歸進行填補

  • 建立在回歸演算法認為特徵和標籤之間存在著某種關係
    • 利用標籤 + 其他特徵反推缺失值
  • 此種做法對於某一個特徵大量缺失,其他特徵卻很完整的情況非常適用

流程

  1. 先遍歷所有特徵,查看有缺失值的為哪些特徵,並從缺失值最少的特徵開始進行填補
    • 填補缺失值最少的特徵所需要的準確信息最少
  2. 填補其中一個特徵時,先將其他特徵缺失值用0代替
  3. 劃分測試集及訓練集
  4. 建模後預測該特徵的缺失值
  5. 將預測值放到原本的特徵矩陣中;重複第2步驟

Reference

  1. http://www.peixun.net/view/1281.html