使用MICE进行缺失值的填充处理

在我们进行机器学习时,处理缺失数据是非常重要的,因为缺失数据可能会导致分析结果不准确,严重时甚至可能产生偏差。处理缺失数据是保证数据分析准确性和可靠性的重要步骤,有助于确保分析结果的可信度和可解释性。

在本文中,我们讲重点介绍MICE。

MICE(Multiple Imputation by Chained Equations)是一种常用的填充缺失数据的技术。它通过将待填充的数据集中的每个缺失值视为一个待估计的参数,然后使用其他观察到的变量进行预测。对于每个缺失值,通过从生成的多个填充数据集中随机选择一个值来进行填充。通常会重复这个过程多次以增加填充的稳定性。

首先我们先介绍一些常用的缺失数据处理技术:

删除

处理数据是困难的,所以将缺失的数据删除是最简单的方法。

对于小数据集

如果某列缺失值< 3%,则可以将缺失的样本删除,如果某列缺失值>40%,则可以将该列直接删除。

而对于缺失值在>3%和<40%的数据,则需要进行填充处理。

对于大数据集:

缺失值< 10%可以使用填充技术

缺失值> 10%则需要测试相关性并决定该特征是否值得用于建模后逐行删除缺失记录

删除是处理缺失数据的主要方法,但是这种方法有很大的弊端,会导致信息丢失。

填充

填充是一种简单且可能是最方便的方法。我们可以使用Scikit-learn库中的SimpleImputer进行简单的填充。

 from sklearn.impute import SimpleImputer

SimpleImputer有"strategy"参数,它可以让我们选择填充的策略

比如特征是数值可以使用均值或中位数作为策略来估算值,特征是分类的可以使用众数作为策略来估算值

K-最近邻插值算法

KNN算法是一种监督技术,它简单地找到"特定数据记录中最近的k个数数据点",并对原始列中最近的k个数数据点的值取简单的平均值,并将输出作为填充值分配给缺失的记录。

我们可以根据现有数据的特点选择不同的距离度量------"欧几里得距离"、"曼哈顿距离"、"闵可夫斯基距离"等。对于数值特征,KNN插值对相邻值进行加权平均。对于分类特征,KNN取最近邻值的众数。

这里的"K"是一个超参数。

MICE

Multiple Imputation by Chained Equations的基本假设是

"数据是随机丢失的,通过查看其他数据样本/记录,可以对数据的真实价值做出有根据的猜测。"

看到他的英文我们就知道,他又2个主要的工作步骤:

  1. 多重插补(Multiple Imputation):MICE通过多次生成填充数据集来处理缺失数据。在每次迭代中,它将缺失值填充为估计的值,然后将完整的数据集用于下一次迭代,从而产生多个填充的数据集。
  2. 链式方程(Chained Equations):MICE使用链式方程的方法进行填充。它将待填充的缺失值视为需要估计的参数,然后使用其他已知的变量作为预测变量,通过建立一系列的预测方程来进行填充。每个变量的填充都依赖于其他变量的估计值,形成一个链式的填充过程。

步骤:

  1. 初始化:首先,确定要使用的填充方法和参数,并对数据集进行初始化。
  2. 循环迭代:接下来,进行多次迭代。在每次迭代中,对每个缺失值进行填充,使用其他已知的变量来预测缺失值。
  3. 生成多个填充数据集:每次迭代生成一个填充的数据集,直到达到设定的迭代次数或者满足收敛条件。
  4. 合并结果:最后,将生成的多个填充数据集进行合并,通常采用简单的方法(如取均值)来汇总结果,得到一个最终的填充数据集。

优点:

  • 考虑了变量之间的相关性,能够更准确地估计缺失值。
  • 生成了多个填充数据集,能够反映不确定性。
  • 能够灵活地处理不同类型的变量和不同分布的数据。

注意事项:

  • 对于不适用于预测的变量,需要进行预处理或者使用专门的方法进行填充。
  • 需要根据实际情况选择合适的迭代次数和收敛条件,以确保填充结果的稳定性和准确性。
  • 填充后的数据集可能会影响后续分析的结果,因此需要进行适当的验证和比较。

下面我们来使用

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那么好。

https://avoid.overfit.cn/post/912ca36b9d44439c801243267178c02a

作者:Rahul Kotecha

相关推荐
Hoper.J2 分钟前
用两行命令快速搭建深度学习环境(Docker/torch2.5.1+cu118/命令行美化+插件),包含完整的 Docker 安装步骤
人工智能·深度学习·docker
Shaidou_Data7 分钟前
信息技术引领未来:大数据治理的实践与挑战
大数据·人工智能·数据清洗·信息技术·数据治理技术
Elastic 中国社区官方博客8 分钟前
开始使用 Elastic AI Assistant 进行可观察性和 Microsoft Azure OpenAI
大数据·人工智能·elasticsearch·microsoft·搜索引擎·全文检索·azure
qq_2739002325 分钟前
pytorch detach方法介绍
人工智能·pytorch·python
AI狂热爱好者42 分钟前
A3超级计算机虚拟机,为大型语言模型LLM和AIGC提供强大算力支持
服务器·人工智能·ai·gpu算力
边缘计算社区42 分钟前
推理计算:GPT-o1 和 AI 治理
人工智能·gpt
虞书欣的644 分钟前
Python小游戏24——小恐龙躲避游戏
开发语言·python·游戏·小程序·pygame
FHYAAAX1 小时前
【机器学习】任务十:从函数分析到机器学习应用与BP神经网络
开发语言·python
PyAIGCMaster1 小时前
python环境中,敏感数据的存储与读取问题解决方案
服务器·前端·python
OBOO鸥柏1 小时前
OBOO鸥柏“触摸屏广告一体机交互”亮相2024中国珠海航展
大数据·人工智能·科技·交互