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

本文探讨了在机器学习中如何处理数据缺失值,尤其是使用sklearn的随机森林算法进行填充。通过泰坦尼克号数据集为例,展示了删除、简单填充与随机森林填充的比较,强调了选择合适填充方法的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

我们在现实中收集的数据,几乎不可能是完美无缺的,往往会有一些缺失值,面对缺失值,很多人先择的方法是直接将包含缺失值的样本删除,,这是一种有效的方法,但是有时候填补缺失值比之际丢弃样本有更好的效果。即使我们其实并不知道缺失值的真实样貌。在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()

在这里插入图片描述
原始数据中,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.drop(na_index, inplace=True)
df.info
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值