Python私活150元,用隨機森林填補缺失值

眾所周知,進行機器學習建模的第一步就是資料預處理,在資料預處理的過程中,處理缺失值則是關鍵一步。在資料集規模較小的情況下,如果對缺失值進行貿然的刪除,則會導致本就不多的資料更為稀少。所以我們需要對缺失值進行一定的填補。在填補的方法中,有直接用0填補的,有用均值的,有用中位數的,還有用眾數的這些方法雖然簡單,但是對資料集的還原程度不高,所以今天為大家介紹如何使用隨機森林的方法預測並且填補缺失值我們先來看看這個資料集

Python私活150元,用隨機森林填補缺失值

img它有許多缺失值,我們先對這個資料集進行探索

觀察資料

99 rows × 10 columns

只有mileage、 engine 、seats有缺失值,其餘都完整

重點關注文字資料

對文字資料,一般採用onehot編碼或者label編碼從語義上看owner這個屬性的值是有明顯的定序特徵,不宜採用onehot編碼,而其餘都是分類屬性,並且屬性值的種類不多不會對隨機森林演算法有過度的負面作用,所以可以採用onehot編碼

對owner進行label編碼

對其餘文字屬性,統一使用get_dummies方法進行onehot編碼

99 rows × 17 columns

檢視編碼後的資料

對每一列屬性的缺失值個數進行求和統計

隨機森林演算法填充缺失值

先填充缺失值較少的的列,之後再填多的原理:將要填補的列作為目標列,其餘列作為屬性列,用隨機森林預測目標列的值進行填充用非空的行作為訓練集,空的行作為測試集,訓練集中的資料有空值,則先用0填充

首先去除特定的列得到屬性列,記為X;選取特定的列作為目標列,記為Y在得到的屬性列中,用0填補缺失值在目標列中選取非空的行的index作為選取訓練集的依據,空行的index作為測試集的依據這樣就可以在X,Y中得到訓練集和測試集了有了訓練集就把它們丟到隨機森林訓練,然後用訓練好的模型預測測試集中的資料得到預測值最後將預測值填到相應的位置中

檢視填充後的資料

可以發現原有的缺失值已經被填好了

最後把結果匯出為excel檔案

最後,推薦螞蟻老師的sklearn 100題機器學習課程: