利用随机森林填补缺失值

  • 介绍
  • 利用随机森林填补缺失值

介绍

说到缺失值,我想各位在进行数据分析之前或多或少都是会遇到的。在做有关机器学习的项目的时候,出题人都是会给你一个好几万好几十万的数据,可能会出现很多的缺失值。填补缺失值的方法其实有很多,利用pandas自带的fillnan,replace方法,使用sklearn.impute的SimpleImputer等都是可以填补的,在这里主要是介绍使用随机森林来进行填补缺失值。

利用随机森林填补缺失值

利用随机森林进行填补缺失值的思想:随机森林是进行回归的操作,我们可以把那些包含缺失值的列当作标签,如果是很多列都有缺失值,那么就要按照每一列的缺失值的从小到大来填补(因为这样子的话,正确率会更加高一些,因为缺失值少的那个对特征等的要求更加低一些),然后在将剩下和原本就已经给的标签组成新的特征矩阵(一般情况下,最开始的标签是不会有缺失值的),在这个特征矩阵里面,将缺失值利用numpy,pandas或者sklearn的impleImputer填补为0,因为0对数据的影响比较小。接着就是将取出的那个新的标签列,按照有没有缺失值分为Ytrain和Ytest,同样的道理,按照新标签列有缺失值所在的行的位置,将新的特征矩阵分为Xtrain和Xtest,然后就可以利用RandomForestRegressor()来进行训练和预测,利用predict接口来得到最后的Y,其实在前面的Ytest并没有用处,只是来确定所在的行而已。在这里的predict出来的就是要填补的内容,将它把Ytest覆盖就可以了。如果有缺失值的列很多的话,就可以使用循环,不断的预测就可以了。最后所填补的缺失值的正确率要远比利用0填补,均值填补,中位数填补,最多数填补的高。

接下要使用的数据可以在链接下载:https://pan.baidu.com/s/1pfGMHUxiAx__FSEnbv-OXg
提取码:ko12

import pandas as pd
data = pd.read_excel(r'datasets.xlsx',sheet_name = 2)#在这里的是xlsx文件,我们要使用pd.read_excel方法

下面的这个就是数据

data.info()

信息如下

这里导入所有要使用到的包

from sklearn.impute import SimpleImputer
from sklearn.ensemble import RandomForestRegressor
import numpy as np

为了安全,先使用copy()方法来复制一个副本进行操作

data_copy = data.copy()

在这里的data_copy是data.copy()来的,在这里很明显发现,第一列是object的,而且不需要进行填补,进行删除。

data_copy.drop(data_copy.columns[0], axis=1, inplace=True)
sindex = np.argsort(data_copy.isnull().sum()).values

上面的这个代码就是对那个进行了从小到大排序,并且是返回的所对应的列号而不是列名,这里的np.argsort就是一个从小到大的排序,不过不同于sort等,这个是返回的是列号,然后使用values得到其中的内容放入sindex中,还要介绍的是,我们都知道在python里面False和True用数字表示分别是0和1,在上面的代码里面就是使用这个特性,得到总和进行排序。
接下来的代码就是核心所在

# 进行缺失值的填补,利用随机森林进行填补缺失值
for i in sindex :if data_copy.iloc[:,i].isnull().sum() == 0 :continuedf = data_copyfillc = df.iloc[:, i]df = df.iloc[:,df.columns!=df.columns[i]]#在下面的是使用了0来对特征矩阵中的缺失值的填补,df_0 = SimpleImputer(missing_values=np.nan,strategy="constant",fill_value=0).fit_transform(df)Ytrain = fillc[fillc.notnull()]Ytest = fillc[fillc.isnull()]Xtrain = df_0[Ytrain.index,:]Xtest = df_0[Ytest.index,:]rfc = RandomForestRegressor()rfc.fit(Xtrain, Ytrain)Ypredict = rfc.predict(Xtest)data_copy.loc[data_copy.iloc[:,i].isnull(),data_copy.columns[i]] = Ypredict

上面就是前面的思想的代码体现,如果看懂了前面的思想的,在这里应该是很好理解的。

接着可以使用下面的代码来进行查看是否还具有缺失值。

data_copy.isnull().sum()

运行结果如下


可以看到上面全部都是为0了,所有都填补好了,可以看一下填补之后的数据。

看上去还不错,哈哈,好了这个方法就介绍到这里了,如果有任何问题欢迎批评指教。还有在我分享的文件中还有其它的数据,感兴趣的可以使用这个在对其它的数据进行缺失值填补哦,最后感谢查看我的博客。
另外一片和这个类似的更加简单的讲述使用的方法的文章
https://blog.csdn.net/Ayingpan/article/details/115659170

利用随机森林填补缺失值相关推荐

  1. (机器学习)随机森林填补缺失值的思路和代码逐行详解

    随机森林填补缺失值 1.使用0和均值来填补缺失值 2.用随机森林填补缺失值的思路 3.使用随机森林填补缺失值代码逐行详解 3.1导包,准备数据,以及创造缺失的数据集 3.2数据集中缺失值从少到多进行排 ...

  2. 使用随机森林填补缺失值

    使用随机森林进行缺失值填补的思想: X和y之间是有联系的,所以才能用X预测y;那么反过来,y也可以在一定程度上预测X. 当X中的某个特征x有缺失值时,我们将该特征看为target,y看作一个新特征(即 ...

  3. python实现-用随机森林填补缺失值、均值填充0填充的比较

    sklearn中,可以使用sklearn.impute.SimpleImputer来轻松地填充均值等 import numpy as np import pandas as pd import mat ...

  4. 机器学习之随机森林填补缺失值和众数填补缺失值

    文章目录 基础 代码 填充众数(add) 代码 基础 随机森林由Leo Breiman(2001)提出的一种分类算法,它通过自助法(bootstrap)重采样技术,从原始训练样本集N中有放回地重复随机 ...

  5. 特征工程-使用随机森林进行缺失值填补

    特征工程-使用随机森林进行缺失值填补 一.前言 特征工程在传统的机器学习中是非常重要的一个步骤,我们对机器学习算法的优化通常是有限的.如果在完成任务时发现不管怎么优化算法得到的结果都不满意,这个时候就 ...

  6. 随机森林案例:回归森林填补缺失值

    文章目录 前言 使用随机森林回归填补缺失值 1.导入库 2. 以波士顿数据集为例,导入完整的数据集并探索 3.为完整数据集放入缺失值 4. 使用0和均值来进行填补 5. 使用随机森林填补缺失值 6. ...

  7. 利用随机森林进行特征选择

    随机森林中的特征重要性 随机森林算法示意图 利用随机森林选择特征可参看论文Variable selection using Random Forests. 用随机森林进行特征重要性评估的思想其实很简单 ...

  8. 利用随机森林算法实现Bank风险预测

    利用随机森林算法实现Bank风险预测 源码分享及数据集分享:https://github.com/luo948521848/BigDatas 在机器学习中,随机森林是一个包含多个决策树的分类器, 并且 ...

  9. 利用随机森林预测股票大盘涨跌

    本文仅从实战角度去观察,利用机器学习算法中,随机森林模型预测股票市场指数涨跌的准确率. 适合入门玩家 首先,我们导入所需要的模块 import numpy as np import pandas as ...

最新文章

  1. oracle initialization or shutdown in progress解决方法
  2. c语言switch写值班表,如何用asp编写按周轮换的值班表?例,1月份的值班领导有4位,怎样写可以让4位领导的名字自动到时间显示...
  3. 计算机最早的运算领域,2013年计算机一级MsOffice模拟试题及答案38
  4. NSwag 和 ASP.NET Core
  5. uva 111 History Grading(最长公共子序列)
  6. vue-cli关闭eslint及配置eslint
  7. cocoapods应用第一部分-xcode创建.framework相关
  8. 关于Linux系统之VM安装配置(每一个步骤都超级详细的哦!)
  9. 如何下载互联网上的所有网页
  10. Vue问题之 项目目录结构介绍
  11. 函数的length属性
  12. 男女人生良缘生克批意
  13. 16进制高精度计算的加减乘20211001
  14. ArcSDE10升级SP1补丁
  15. 造价猫工程预算视频教程-ET型楼梯钢筋计算,实例解读
  16. Office 365 函数之Right函数
  17. k8s挂载nfs创建pv
  18. unity网格变形插件Megafiers简介
  19. 录音语音识别系统功能图
  20. 2000-2020年迪博上市公司内部控制指数

热门文章

  1. window10 更新提示 0x80073712错误
  2. 数据库两表联查、多表联查,多重联查
  3. VB/VBA,请让我点名表扬你
  4. 动态路由id会拼接到地址栏中,如何获取这个id
  5. Java实现仿QQ聊天工具的项目总结
  6. 雅可比(Jacobian)矩阵简介
  7. 【Linux】学习笔记1
  8. C语言布斯乘法算法,布斯Booth算法带符号位的乘法verilog语言实现booth算法
  9. 导航条动态模糊效果实现原理实战
  10. uni-app H5打包上线流程