机器学习sklearn----用随机森林来填充缺失值

文章目录

  • 概述
  • 填充思路
  • 原始数据
  • 实现代码
  • 训练模型比较
  • 总结

概述

我们在现实中收集的数据,几乎不可能是完美无缺的,往往会有一些缺失值,面对缺失值,很多人先择的方法是直接将包含缺失值的样本删除,,这是一种有效的方法,但是有时候填补缺失值比之际丢弃样本有更好的效果。即使我们其实并不知道缺失值的真实样貌。在sklearn中,我们可以使用sklearn.impute.SimpleImputer来轻松的将均值、中值或者其他常用的数值填补到缺失值中,具体用法戳这里。在这个案例中我们将用随机森林来填补缺失值。

填充思路

对于一个有n个特征的数据来说,其中特征T有缺失,我们就将特征T当作标签,其他n-1个特征和原来的标签组成新的特征矩阵。对于特征T来说,他没有缺失的部分就是我们的y_train,这部分对应的标签就是X_train,缺失部分就是我们需要预测的部分,也即是y_predict,这部分对应的标签就是X_test,对于数据中有多个特征缺失的情况,需要从缺失值最少的特征开始填补(填补缺失值越少的特征需要的准确信息越少)
当填补一个特征时,将其他特征的缺失值用0代替,依次填补直到所有特征填补完全

原始数据

本次使用的数据为kaggle上泰坦尼克幸存者数据集,原始数据下载地址,也可以在我的数据集下载地址获得同样的数据

实现代码

到相关库

from sklearn.ensemble import RandomForestClassifier # 随机森林分类器,处理分类问题
from sklearn.ensemble import RandomForestRegressor # 随机森林回归器,处理连续值问题
from sklearn.impute import SimpleImputer # sklearn填充缺失值的类
from sklearn.model_selection import cross_val_score # 交叉检验
from sklearn.model_selection import train_test_split # 分割训练测试集
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

%matplotlib inline

加载原始数据

# 导入原始数据
file_name = "../../data/titanic/train.csv"
df = pd.read_csv(file_name)

# 删除不必要特征
df.drop(['Name', 'Ticket'], inplace=True, axis=1)
df.info()

机器学习sklearn----用随机森林来填充缺失值_第1张图片
原始数据中,Age缺失200左右,Cabin缺失700左右,Embarked缺失2个,Age,Cabin缺失很多,不能直接的删除,这样会造成样本数据大量减少,对模型的训练带来很大的影响,Embarked缺失2条,可用放心的删除缺失的部分,不会对模型造成什么影响。对于Age和Cabin要考虑进行缺失值的填充,有简单的使用sklearn.impute.SimpleImputer来轻松的将均值、中值或者其他常用的数值填补到缺失值中,具体用法戳这里。这里考虑随机森林填充的方式。

删除Embarked中的缺失数据

# Embarked 缺失值很少,这里将缺失的那两行数据删除
# 获得缺失值所在的行索引
na_index = df.loc[df['Embarked'].isnull(), 'Embarked'].index

# 删除缺失值所在的行
df

你可能感兴趣的:(机器学习,#,sklearn,数据分析,机器学习,python,人工智能,经验分享)