數據處理之缺失值的處理

目錄

 

缺失值產生的原因

完全變量與不完全變量

缺失值的類型

缺失值的處理方法

直接刪除法

填充法

K最近距離鄰法(K-means clustering)

多重填補(Multiple Imputation,MI)

缺失值處理的類庫

sklearn中關於缺失值的處理類

 R語言通過mice包應用多重插補的步驟

代碼實現

參考資料

 


缺失值產生的原因

  1. 機械原因:由於機械原因導致的數據收集或保存的失敗造成的數據缺失,如收集車流量數據的地感線圈損壞等
  2. 人爲原因: 由於人的主觀失誤、歷史侷限或有意隱瞞造成的數據缺失,比如,在市場調查中被訪人拒絕透露相關問題的答案,或者回答的問題是無效的,數據錄入人員失誤漏錄了數據等 

 

完全變量與不完全變量

數據集中不含缺失值的變量(屬性)稱爲完全變量,數據集中含有缺失值的變量稱爲不完全變量 

 

缺失值的類型

  1. 完全隨機缺失(Missing Completely at Random, MCAR)。數據的缺失與不完全變量以及完全變量都是無關的,比如家庭地址的缺失
  2. 隨機缺失(Missing at Random, MAR)。數據的缺失僅僅依賴於完全變量,例如財務數據缺失情況與企業大小有關
  3. 非隨機,不可忽略缺失(Not Missing at Random,NMAR, or nonignorable)。不完全變量中數據的缺失依賴於不完全變量本身,這種缺失是不可忽略的,比如高收入人羣不願意提供他們的收入數據

缺失值的處理方法

  1. 直接刪除法
  2. 填充法
  3. K最近距離鄰法(K-means clustering)
  4. 多重填補(Multiple ImputationMI)

 

直接刪除法

直接刪除含有缺失值的數據項,當含有缺失值的數據項只佔總體數據量很小的一部分時效果最好

 

填充法

  1. 手動填充法(filling manually):在數據量較小的情況下可能是最好的方法,因爲一般來說數據所有者對各列數據的含義更加清楚,手動填充後效果更好,但是在數據量較大時無法操作
  2. 特殊值填寫 (Treating Missing Attribute values as Special values):將空值作爲一種特殊的值來處理,比如R語言中的NApython中的None,操作簡單方便,但是可能對預測結果造成一定的影響,不推薦使用
  3. 平均值填充(Mean/Mode Completer): 將信息表中的屬性分爲數值屬性和非數值屬性來分別進行處理。如果空值是數值型的,就根據該屬性在其他所有對象的取值的平均值來填充該缺失的屬性值;如果空值是非數值型的,就根據統計學中的衆數原理,用該屬性在其他所有對象的取值次數最多的值(即出現頻率最高的值)來補齊該缺失的屬性值

 

K最近距離鄰法(K-means clustering)

先根據歐式距離或相關分析來確定距離具有缺失數據樣本最近的K個樣本,將這K個值加權平均來估計該樣本的缺失數據

 

多重填補(Multiple ImputationMI)

多重插補方法分爲三個步驟:①爲每個空值產生一套可能的插補值,這些值反映了無響應模型的不確定性;每個值都可以被用來插補數據集中的缺失值,產生若干個完整數據集合。②每個插補數據集合都用針對完整數據集的統計方法進行統計分析。③對來自各個插補數據集的結果,根據評分函數進行選擇,產生最終的插補值。

 

缺失值處理的類庫

sklearn中關於缺失值的處理類

 

 R語言通過mice包應用多重插補的步驟

 

代碼實現

  • 直接刪除法(Drop Columns with Missing Values
cols_with_missing = [col for col in X_train.columns if X_train[col].isnull().any()]
# Drop columns in training and validation data
reduced_X_train = X_train.drop(cols_with_missing, axis=1)
reduced_X_valid = X_valid.drop(cols_with_missing, axis=1)
  • 填充法(Filling method)
# Imputation
# use SimpleImputer to replace missing values with the mean value along each column.
my_imputer = SimpleImputer()
imputed_X_train = pd.DataFrame(my_imputer.fit_transform(X_train))
imputed_X_valid = pd.DataFrame(my_imputer.transform(X_valid))

# Imputation removed column names; put them back
imputed_X_train.columns = X_train.columns
imputed_X_valid.columns = X_valid.columns
  • K最近距離鄰法(K-means clustering)
imputer = KNNImputer(n_neighbors=2, weights="uniform")
Imputed_X = imputer.fit_transform(X)
  • 多重填補(Multiple ImputationMI)
#R語言:基於mice包的分析通常分析過程:
library(mice)
imp<-mice(data,m)
fit<-with(imp,analysis)#analysis是一個表達式對象,設定用於m個插補數據集的統計方法。
pooled<-pool(fit)
summary(pooled)

參考資料

  1. 智能交通領域常見的數據採集技術
  2. 數據缺失機制以及缺失值處理方式
  3. Sklearn筆記:缺失值處理
  4. 多重插補(MI)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章