在我们进行机器学习时,处理缺失数据是非常重要的,因为缺失数据可能会导致分析结果不准确,严重时甚至可能产生偏差。处理缺失数据是保证数据分析准确性和可靠性的重要步骤,有助于确保分析结果的可信度和可解释性。
在本文中,我们讲重点介绍MICE。
MICE(Multiple Imputation by Chained Equations)是一种常用的填充缺失数据的技术。它通过将待填充的数据集中的每个缺失值视为一个待估计的参数,然后使用其他观察到的变量进行预测。对于每个缺失值,通过从生成的多个填充数据集中随机选择一个值来进行填充。通常会重复这个过程多次以增加填充的稳定性。
首先我们先介绍一些常用的缺失数据处理技术:
处理数据是困难的,所以将缺失的数据删除是最简单的方法。
对于小数据集
如果某列缺失值< 3%,则可以将缺失的样本删除,如果某列缺失值>40%,则可以将该列直接删除。
而对于缺失值在>3%和<40%的数据,则需要进行填充处理。
对于大数据集:
缺失值< 10%可以使用填充技术
缺失值> 10%则需要测试相关性并决定该特征是否值得用于建模后逐行删除缺失记录
删除是处理缺失数据的主要方法,但是这种方法有很大的弊端,会导致信息丢失。
填充是一种简单且可能是最方便的方法。我们可以使用Scikit-learn库中的SimpleImputer进行简单的填充。
from sklearn.impute import SimpleImputer
SimpleImputer有“strategy”参数,它可以让我们选择填充的策略
比如特征是数值可以使用均值或中位数作为策略来估算值,特征是分类的可以使用众数作为策略来估算值
KNN算法是一种监督技术,它简单地找到“特定数据记录中最近的k个数数据点”,并对原始列中最近的k个数数据点的值取简单的平均值,并将输出作为填充值分配给缺失的记录。
我们可以根据现有数据的特点选择不同的距离度量——“欧几里得距离”、“曼哈顿距离”、“闵可夫斯基距离”等。对于数值特征,KNN插值对相邻值进行加权平均。对于分类特征,KNN取最近邻值的众数。
这里的“K”是一个超参数。
Multiple Imputation by Chained Equations的基本假设是
“数据是随机丢失的,通过查看其他数据样本/记录,可以对数据的真实价值做出有根据的猜测。”
看到他的英文我们就知道,他又2个主要的工作步骤:
步骤:
优点:
注意事项:
下面我们来使用fancyimpute
库来进行代码显示。
fancyimpute
提供了多种高级的缺失数据填充技术,包括矩阵分解、K-最近邻、插值和矩阵完成等。它的设计目标是提供一种方便、灵活且高效的方式来处理缺失数据,以便于后续的数据分析和建模。
import pandas as pd
from sklearn.model_selection import train_test_split
from fancyimpute import IterativeImputer
.#In these steps we undertake data exploration and pre-processing
.#I intend to skip till the completion of train-test split of data
.
.
.
xtrain, xtest, ytrain, ytest = train_test_split(x, y, test_size=0.25, random_state=101)
# Initialize MICE imputer
imputer = IterativeImputer()
# Fit and transform MICE imputer on training data
xtrain_imputed = imputer.fit_transform(xtrain)
# Transform test data using the trained MICE imputer
xtest_imputed = imputer.transform(xtest)
这里需要注意的是,我们需要在训练集上进行拟合,然后在测试集上进行转换,这样可以保证不会有数据泄露的问题。
虽然MICE带来了计算成本,需要考虑以非常接近真实的标签估算为代价,但是它可以有效地处理各种类型和分布的缺失数据,是处理缺失数据的重要工具之一。其他技术相对非常简单,但是结果的质量没有MICE那么好。
作者:Rahul Kotecha
本文分享自 DeepHub IMBA 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!