目錄html
缺失值產生的緣由python
徹底變量與不徹底變量dom
缺失值的類型函數
缺失值的處理方法spa
直接刪除法.net
填充法code
K最近距離鄰法(K-means clustering)orm
多重填補(Multiple Imputation,MI)htm
缺失值處理的類庫對象
缺失值產生的緣由
- 機械緣由:因爲機械緣由致使的數據收集或保存的失敗形成的數據缺失,如收集車流量數據的地感線圈損壞等
- 人爲緣由: 因爲人的主觀失誤、歷史侷限或有意隱瞞形成的數據缺失,好比,在市場調查中被訪人拒絕透露相關問題的答案,或者回答的問題是無效的,數據錄入人員失誤漏錄了數據等
徹底變量與不徹底變量
數據集中不含缺失值的變量(屬性)稱爲徹底變量,數據集中含有缺失值的變量稱爲不徹底變量
缺失值的類型
- 徹底隨機缺失(Missing Completely at Random, MCAR)。數據的缺失與不徹底變量以及徹底變量都是無關的,好比家庭地址的缺失
- 隨機缺失(Missing at Random, MAR)。數據的缺失僅僅依賴於徹底變量,例如財務數據缺失狀況與企業大小有關
- 非隨機,不可忽略缺失(Not Missing at Random,NMAR, or nonignorable)。不徹底變量中數據的缺失依賴於不徹底變量自己,這種缺失是不可忽略的,好比高收入人羣不肯意提供他們的收入數據
缺失值的處理方法
- 直接刪除法
- 填充法
- K最近距離鄰法(K-means clustering)
- 多重填補(Multiple Imputation,MI)
直接刪除法
直接刪除含有缺失值的數據項,當含有缺失值的數據項只佔整體數據量很小的一部分時效果最好
填充法
- 手動填充法(filling manually):在數據量較小的狀況下多是最好的方法,由於通常來講數據全部者對各列數據的含義更加清楚,手動填充後效果更好,可是在數據量較大時沒法操做
- 特殊值填寫 (Treating Missing Attribute values as Special values):將空值做爲一種特殊的值來處理,好比R語言中的NA,python中的None,操做簡單方便,可是可能對預測結果形成必定的影響,不推薦使用
- 平均值填充(Mean/Mode Completer): 將信息表中的屬性分爲數值屬性和非數值屬性來分別進行處理。若是空值是數值型的,就根據該屬性在其餘全部對象的取值的平均值來填充該缺失的屬性值;若是空值是非數值型的,就根據統計學中的衆數原理,用該屬性在其餘全部對象的取值次數最多的值(即出現頻率最高的值)來補齊該缺失的屬性值
K最近距離鄰法(K-means clustering)
先根據歐式距離或相關分析來肯定距離具備缺失數據樣本最近的K個樣本,將這K個值加權平均來估計該樣本的缺失數據
多重填補(Multiple Imputation,MI)
多重插補方法分爲三個步驟:①爲每一個空值產生一套可能的插補值,這些值反映了無響應模型的不肯定性;每一個值均可以被用來插補數據集中的缺失值,產生若干個完整數據集合。②每一個插補數據集合都用針對完整數據集的統計方法進行統計分析。③對來自各個插補數據集的結果,根據評分函數進行選擇,產生最終的插補值。
缺失值處理的類庫
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 Imputation,MI)
#R語言:基於mice包的分析一般分析過程: library(mice) imp<-mice(data,m) fit<-with(imp,analysis)#analysis是一個表達式對象,設定用於m個插補數據集的統計方法。 pooled<-pool(fit) summary(pooled)