用随机森林补全缺失值

本篇博客的知识和代码全都来源于此:寒小阳的博客:泰坦尼克哈之灾

一、这里先说一下通常处理缺失值的几种方法:

​ i)如果缺失的样本占总数极大,我们可能就直接舍弃了;因为如果作为特征加入的话,可能反倒带入噪音,影响最后的结果

​ ii)如果缺值的样本适中,且为非连续值特征属性,我们可以把nan作为一个新类别,加入到类别特征中

​ iii)如果缺值的样本适中,且为连续值特征属性,有时候可以考虑给定一个step(比如这里的age,我们可以考虑每隔2/3岁为一个步长),然后把它离散化,之后把nan作为一个type加到属性类目中

​ iv)如果缺失值得个数不是特别多,那我们也可以试着根据已有得值,拟合一下数据,补充上去

二、我以kaggle上的经典入门题目:泰坦尼克号之灾为例来分享一下用随机森林来补全缺失值的方法。

1)先来描述一下数据,数据共有12个特征如下:
在这里插入图片描述
其中5个对象型特征,7个数值型特征;7个数值型特征中PassengerId和Survived特征暂时派不上用场,所以最后放到随机森林里的特征也就是剩下的5个:‘Age’,‘Fare’,‘Parch’,‘SibSp’,‘Pclass’。

2)代码如下:

from sklearn.ensemble import RandomForestRegressor

def set_missing_ages(df):
	#把数值型特征都放到随机森林里面去
    age_df=df[['Age','Fare','Parch','SibSp','Pclass']]
    known_age = age_df[age_df.Age.notnull()].as_matrix()
    unknown_age = age_df[age_df.Age.isnull()].as_matrix()
    y=known_age[:,0]#y是年龄,第一列数据
    x=known_age[:,1:]#x是特征属性值,后面几列
    rfr=RandomForestRegressor(random_state=0,n_estimators=2000,n_jobs=-1)
    #根据已有数据去拟合随机森林模型
    rfr.fit(x,y)
    #预测缺失值
    predictedAges = rfr.predict(unknown_age[:,1:])
    #填补缺失值
    df.loc[(df.Age.isnull()),'Age'] = predictedAges
    
    return df,rfr
  • 13
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值