用随机森林填补缺失值
这里呢,首先将波士顿数据进行填空,然后在对含有空值的数据进行,0、均值、随机森林回归填充,并比较其好坏,并以图像视之。
首先导入所需要的库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_boston#数据集
from sklearn.impute import SimpleImputer#填补缺失的类
from sklearn.ensemble import RandomForestRegressor
获取数据,并查看数据
dataset = load_boston()#数据
dataset.data.shape#查看数据结构
确定样本和标签数量
n_samples = x_full.shape[0]#样本数量
n_features = x_full.shape[1]#标签数量
确定缺失值
#首先确定我们希望放入的缺失值数据的比例,在这里我们假设是50%,那就要有3289个数据缺失
rng = np.random.RandomState(0)
missing_rate = 0.5
n_missing_samples = int(np.floor(n_samples * n_features *missing_rate))
取出将赋值为空值的索引
#np.floor 向下取整
#所有数据要随机遍布在数据集的各行各列当中,而一个确实的数据会需要一盒行索引和一个列索引
#如果能够创造一个数组,就可以利用索引来赋空值
#用0,均值,随机森林来填写这些缺失值,然后查看这些回归结果
missing_features = rng.randint(0,n_features,n_missing_samples)
missing_samples =rng.randint(0,n_samples,n_missing_samples)
#randint(上限,下限,n) 请在下限和上限之间取出n个整数
#我们现在采样了3289个数据,远远超过了我们的样本量,所以可以使用随机抽取的函数randint
将数据赋值为nan
#但是如果我们的数据量小于我们的样本量506,那我们可以采用np.random.choice,choice会随机抽取不重复的随机数
##因此可以帮助我们让数据更加分散,确保数据不会集中在一些行中