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。如果有提示报错的话,还是要看看数据类型的有没有弄错。

你可能感兴趣的:(python,学习笔记)