RandomForestClassifier隨機森林補充缺失值(以TItanic資料集為例)
上一篇是分類填補缺失值,用了迴圈函式。這此呢,我們利用隨機森林補充缺失資料。
import pandas as pd import matplotlib.pyplot as plt import numpy as np from sklearn.ensemble import RandomForestClassifier df=pd.read_csv('E:\\Users\\Administrator\\Desktop\\pythonNotebook\\train.csv',index_col=0) data=df[['Survived', 'Pclass', 'Sex', 'Age', 'SibSp', 'Parch','Fare', 'Cabin', 'Embarked']] #更改分類變數對應的值 data.loc[data['Sex']=='male','Sex']=0 data.loc[data['Sex']=='female','Sex']=1 #同理,更改Embarked對應的值 data.loc[data['Embarked']=='S','Embarked']=0 data.loc[data['Embarked']=='C','Embarked']=1 data.loc[data['Embarked']=='Q','Embarked']=2 te=data[data['Embarked'].notnull()]#非空的embarked對應的行 te_X=te[['Survived','Pclass','Sex','SibSp','Parch','Fare']]#設定輸入的X te_Y=te[['Embarked']]#設定輸入的Y te_X=te_X.astype(float)#轉換資料型別,不轉換成數值型的,到後面輸入模型會報錯。 te_Y=te_Y.astype(float)#轉換資料型別,不轉換成數值型的,到後面輸入模型會報錯。 tr=data[data['Embarked'].isnull()] tr_X=tr[['Survived','Pclass','Sex','SibSp','Parch','Fare']].astype(float) tr_Y=tr['Embarked'].astype(float) fc=RandomForestClassifier() fc.fit(te_X,te_Y) pr=fc.predict(tr_X)
data[data['Embarked'].isnull(),'Embarked']=pr#將預測的缺失值補充到原來的缺失的位置
這裡只是簡單的舉例,利用隨機森林(可以是RandomForestClassifier,RandomForestRegressor,這裡用的是前者)去補充缺失值。同理也可以對age資料補充,這裡就要用到RandomForestRegressor了,相應的前面應該是from sklearn.ensemble import RandomForestRegressor。如果有提示報錯的話,還是要看看資料型別的有沒有弄錯。