使用随机森林回归来填补缺失值

1.导包

先导入一些需要的包

import numpy as np
import pandas as pd
import matplotlib.pyplot as pltfrom sklearn.datasets import load_boston
from sklearn.impute import SimpleImputer#用于填补缺少的类
from sklearn.ensemble import RandomForestRegressor

2.导入数据

dataset = load_boston()

Ⅰ.简单数据探索

dataset.data
dataset.target
dataset.info() wrong for dataFrame
dataset.data.shape

Ⅱ.强行制造缺失的数据

在制造之前我们要保留一个完整的数据集

X_full,y_full = dataset.data,dataset.target#没有缺失数字的数据集

以完整的形状来进行填补的操作

n_samples = X_full.shape[0]
n_samples

n_features = X_full.shape[1]
n_features#13

Ⅲ.为完整数据集放入缺失值

确定一种随机种子,一种随机模式,代替下面所有可能使用random_state的地方

rng = np.random.RandomState(0)

首先我们确定放入的缺少数据的比例,这里就假设50%

missing_rate = 0.5

506 * 13 * 0.5

np.floor表示向下取整,返回.0格式的浮点数。

为什么要先int呢–>如果更改成其他的比例可能是小数

n_missing_samples = int(np.floor(n_samples*n_features*missing_rate))
print(n_missing_samples)

所有数据要随机遍布在数据集的各行各列当中,而一个缺失的数据会需要一个行索引和一个列索引,

如果能够创造一个数组,包含3289个分布在0~ 506中间的行索引,和3289个分布在0~13之间的列索引,

那我们就可以利用索引来为数据中的任意3289个位置赋空值,

然后我们用0,均值和随机森林来填写这些缺失值,然后查看回归的结果如何。

randint(上限,下限,n)请在上下限之间取出n个整数

missing_features = rng.randint(0,n_features,n_missing_samples)#[0,13)
missing_samples = rng.randint(0,n_samples,n_missing_samples)#[0,506)
X_missing = X_full.copy()
y_use = y_full.copy()#这里是不会变的、监督学习

把之前取好的3289个缺失位置的xy对应(x,y)在数组中取空

X_missing[missing_samples,missing_features] = np.nan

变成DataFrame的格式

X_missing = pd.DataFrame(X_missing)
X_missing

Ⅳ、使用零和均值填补缺少值

查看所有没有缺失的值

(1)使用均值

from sklearn.impute import SimpleImputer
imp_mean = SimpleImputer(missing_values=np.nan,strategy="mean")#SimpleImputer的实例化
X_missing_mean = imp_mean.fit_transform(X_missing)#训练fit+导出predict--->特殊的接口~fit_transform
X_missing_mean

isnull–>dataFrame才能用

pd.DataFrame(X_missing_mean).isnull()#有null返回true

看不清所有

pd.DataFrame(X_missing_mean).isnull().sum()

(2)使用0

imp_0 = SimpleImputer(missing_values=np.nan,strategy='constant',fill_value=0)
X_missing_0 = imp_0.fit_transform(X_missing)
pd.DataFrame(X_missing_mean).isnull().sum()

(3)使用随机森林填补缺失值

任何回归都是从特征矩阵中学习,然后求解连续型标签y的过程。

之所以这个合理是因为回归算法认为特征矩阵和标签之间存在着某种联系。

这个联系也导致标签和特征是可以相互转换的。

“地区、环境、是否学区”<——>“房价”是可以相互转换一样。

回归填补缺失值,正是利用了这种思想。

对于一个有n个特征来说

​ 特征T缺失->把T当作label~y

​ 缺失的部分当做y_test,有的部分当作y_train.

同时把其他n-1个特征和原来的标签当作X,并且按照y是否缺失分为X_train 和 X_test

这种做法,对于某一个特征大量缺失,其他特征却很完整的情况,非常适用。

当然有其他缺失值也很正常,

​ 遍历所有的特征,从缺失最少的开始进行填补。

填补一个特征时,先将其他特征的缺失值用0代替,每完成一次回归预测,就将预测值放到原本的特征矩阵中,再继续填 补下一个特征。

​ 每一次填补完毕,有缺失值的特征会减少一个,所以每次循环后,需要用0来填补的特征就越来越少

以第六列为例

X_missing_reg = X_missing.copy()
sortindex = np.argsort(X_missing_reg.isnull().sum(axis=0)).values
sortindex

X_missing_reg.head()

避免X_missing_ reg被覆盖

df = X_missing_ref

取所有行和第六列

fillc = df.iloc[:,6]
fillc

除了第六列都取出来再加上原来的标签

df.columns != 6

df.iloc[:,df.columns != 6]

第一个参数[]包含所有要连接的部分,axis=1表示横向。
不要重复按,会覆盖df

df = pd.concat([df.iloc[:,df.columns != 6],pd.DataFrame(y_full)],axis=1)

实例化和接口同时进行

df=SimpleImputer(missing_values=np.nan,strategy='constant',fill_value=0).fit_transform(df)
pd.DataFrame(df)

pd.DataFrame(df_0).isnull().sum()

ytrain = fillc[fillc.notnull()]
ytest = fillc[fillc.isnull()]

我们需要的是ytest是空的,我们需要的是,其所带的索引来定位xtest

ytest

ytrain.index

Xtrain = df_0[ytrain.index,:]#以行取索引,列取全部
pd.DataFrame(Xtrain)

Xtest = df_0[ytest.index,:]
pd.DataFrame(Xtest)

用随机森林来填补缺失值

rfc = RandomForestRegressor(n_estimators=100)
rfc = rfc.fit(Xtrain,ytrain)
ypred = rfc.predict(Xtest)

将填补好的特征返回到我们的原始的特殊矩阵中

 X_missing_reg.loc[X_missing_reg.iloc[:,6].isnull(),6] = ypred

案例2:随机森林来填补缺失值相关推荐

  1. 五、实例:在波士顿房价数据集上用随机森林回归填补缺失值

    在波士顿房价数据集上用随机森林回归填补缺失值 点击标题即可获取源代码和笔记 一.引入 我们从现实中收集的数据,几乎不可能是完美无缺的,往往都会有一些缺失值.面对缺失值,很多人选择的方式是直接将含有缺失 ...

  2. 【skLearn 练习】随机森林回归填补缺失值

    文章目录 随机森林回归填补缺失值 ♦导入需要的库 ♦导入数据集 ♦构建缺失值 ♦缺失值填补 ① 均值mean填补 ② 使用0值填补 ③ 使用随机森林回归填补 ⑴ 缺失值数目排序索引 ⑵ 遍历索引填补空 ...

  3. 12_信息熵,信息熵公式,信息增益,决策树、常见决策树使用的算法、决策树的流程、决策树API、决策树案例、随机森林、随机森林的构建过程、随机森林API、随机森林的优缺点、随机森林案例

    1 信息熵 以下来自:https://www.zhihu.com/question/22178202/answer/161732605 1.2 信息熵的公式 先抛出信息熵公式如下: 1.2 信息熵 信 ...

  4. 数据分析案例-基于随机森林算法的商品评价情感分析

    目录 1.挖掘目标 2.分析方法与过程 2.1总体流程 2.2具体步骤 2.3结果分析 3.结论 摘 要:随着我国的信息化发展速度的加快,时代科技技术的进步以及我国联网设施不断完善.不断普及,网民人数 ...

  5. 大数据分析案例-基于随机森林模型对北京房价进行预测

    目录 1.项目背景 2.项目简介 2.1数据说明 2.2技术工具 3.算法原理 4.项目实施步骤 4.1理解数据 4.2数据预处理 4.2.1缺失值处理 4.2.2重复值处理 4.2.3异常值处理 4 ...

  6. 数据分析案例-基于随机森林对影响信用卡审批结果和用户信用等级的特征分析

    目录 信用卡审核结果特征分析 原始数据 加载数据 数据处理 建模 绘制ROC曲线 特征重要性评分 用户信用等级的特征分析 原始数据 加载数据 数据处理 建模 构建模型 画混淆矩阵图 特征重要性评分 特 ...

  7. 大数据分析案例-基于随机森林算法构建新闻文本分类模型

  8. 大数据分析案例-基于随机森林算法构建人口普查分析模型

  9. 大数据分析案例-基于随机森林算法探究电商网站推销商品的影响因素

最新文章

  1. 【网络基础】02、IP地址
  2. 总结一些通用的处理方法
  3. mysql 数据库引擎常识全集
  4. 安卓逆向_5 --- Android 学习
  5. 敏捷外包工程系列之一:序言(敏捷外包工程,敏捷开发,CMMI,软件外包,政府项目,银行项目,电信项目)...
  6. Linux常用的几个监控系统性能的命令
  7. [转载] Python Web开发最难懂的WSGI协议,到底包含哪些内容? WSGI服务器种类和性能对比
  8. 简易JTAG线缆原理
  9. c# 全局钩子实现扫码枪获取信息。
  10. 【Espruino】NO.06 关键是你的仆人(继续)
  11. Springboot
  12. h5调用原生摄像头扫描二维码
  13. 读计算机网络得学五笔吗,有人说五笔输入法已经被淘汰,现在还有必要学五笔吗?...
  14. 内连接、左外连接与右外连接的区别及作用介绍
  15. Java实验—四子棋进阶
  16. 服务器的类型都有哪些
  17. ViewData与ViewBag比较
  18. mandatory标志的作用
  19. ajax img src如何索引,使用jQuery的ajax方法作为blob检索图像
  20. 逆战小白提升日記——网红时钟罗盘北京时间页代码

热门文章

  1. 7-9 是不是太胖了(5 分)
  2. 0x80073712_win10更新 错误代码: (0x80073712)
  3. 前端基础-VUE入门教程(一)
  4. 速锐得解码特斯拉Model Y整车网关电路及CAN通信协议DBC控制策略
  5. 黑科技!无需代码快速搭建网站的平台来了
  6. Maven安装配置详细教程
  7. 2.4G模块NRF24L01调试经验
  8. python系列——多进程之进程池(pool)
  9. layui——下拉框监听
  10. 交易系统处理性能关键指标