缺失值數據填充

處理缺失值的兩種方法:

1、刪除缺失值的行;
2、填充缺失值。

  如果缺失值的行佔比較多,進行刪除缺失值的話,將丟失大量的數據,這樣得到的模型可能會很差;所以一般對缺失值的處理都是進行填充。

數據可以分以下兩類:

1、數值數據;
2、分類數據;

1、填充數值數據的缺失值

對於數值數據的填充,一般使用0、均值、中位數衆數來填充。

方式一:在全體數據上進行填充
該方法是對所有數據進行填充。

# bmi特徵列,使用0對缺失值進行填充
x['bmi'] = x['bmi'].fillna(0)

或者:

from sklearn.preprocessing import Imputer
# bmi特徵列,使用均值對缺失值進行填充
imputer = Imputer(strategy="mean")
# 行到一個新的DataFrame
x_imputer = pd.DataFrame(imputer.fit_transform(x),columns=['bmi'])

方式二:使用Pipeline和Imputer
  方法一有個缺點,就是當使用均值填充時,使用的是全部數據的均值進行填充,這對模型驗證時不利,因爲模型已經知道了驗證集的部分信息。使用Pipeline和Imputer可以有效地解決這個問題。
  Pipeline類會替我們處理大部分流程:可以恰當地從多個訓練集取值並用其填充測試集的缺失值,還可以正確測試KNN的泛化能力,最終輸出性能最佳的模型。

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import Imputer

# K鄰近模型,knn分類器
knn = KNeighborsClassifier()
# 網絡搜索參數
knn_params =  {'classify__n_neighbors':[1,2,3,4,5,6,7,8,9]}

mean_impute = Pipeline([('imputer',Imputer(strategy='mean')),('classify',knn)])
# 網絡搜索模型
grid = GridSearchCV(mean_impute,knn_params)
grid.fit(x,y)

print(grid.best_score_,grid.best_params_)

2、填充分類數據的缺失值

對於分類數據的填充,一般使用分類值中出現次數最多的值來填充。

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