共计 2459 个字符,预计需要花费 7 分钟才能阅读完成。
在咱们进行机器学习时,解决缺失数据是十分重要的,因为缺失数据可能会导致剖析后果不精确,重大时甚至可能产生偏差。解决缺失数据是保障数据分析准确性和可靠性的重要步骤,有助于确保剖析后果的可信度和可解释性。
在本文中,咱们讲重点介绍 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 个次要的工作步骤:
- 多重插补(Multiple Imputation):MICE 通过屡次生成填充数据集来解决缺失数据。在每次迭代中,它将缺失值填充为预计的值,而后将残缺的数据集用于下一次迭代,从而产生多个填充的数据集。
- 链式方程(Chained Equations):MICE 应用链式方程的办法进行填充。它将待填充的缺失值视为须要预计的参数,而后应用其余已知的变量作为预测变量,通过建设一系列的预测方程来进行填充。每个变量的填充都依赖于其余变量的估计值,造成一个链式的填充过程。
步骤:
- 初始化 :首先,确定要应用的填充办法和参数,并对数据集进行初始化。
- 循环迭代 :接下来,进行屡次迭代。在每次迭代中,对每个缺失值进行填充,应用其余已知的变量来预测缺失值。
- 生成多个填充数据集 :每次迭代生成一个填充的数据集,直到达到设定的迭代次数或者满足收敛条件。
- 合并后果 :最初,将生成的多个填充数据集进行合并,通常采纳简略的办法(如取均值)来汇总后果,失去一个最终的填充数据集。
长处:
- 思考了变量之间的相关性,可能更精确地预计缺失值。
- 生成了多个填充数据集,可能反映不确定性。
- 可能灵便地解决不同类型的变量和不同散布的数据。
注意事项:
- 对于不适用于预测的变量,须要进行预处理或者应用专门的办法进行填充。
- 须要依据理论状况抉择适合的迭代次数和收敛条件,以确保填充后果的稳定性和准确性。
- 填充后的数据集可能会影响后续剖析的后果,因而须要进行适当的验证和比拟。
上面咱们来应用
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