【问题标题】:Imputing missing values using sklearn IterativeImputer class for MICE使用 sklearn IterativeImputer 类为 MICE 输入缺失值
【发布时间】:2020-02-25 00:40:59
【问题描述】:

我正在尝试学习如何实现 MICE 来为我的数据集估算缺失值。我听说过 fancyimpute 的 MICE,但我也读到 sklearn 的 IterativeImputer 类可以完成类似的结果。来自 sklearn 的文档:

我们的 IterativeImputer 实现受到 R MICE 的启发 包(链式方程的多元插补)[1],但是 与它的不同之处在于返回单个插补而不是多个 归责。但是,IterativeImputer 也可以用于多个 通过重复将其应用于同一数据集 sample_postterior=True 时的不同随机种子

我已经看到在不同的管道中使用“种子”,但我对它们的理解不够深入,无法在自己的代码中实现它们。 我想知道是否有人可以解释并提供一个示例,说明如何使用 sklearn 的 IterativeImputer 为 MICE 插补实现种子?谢谢!

【问题讨论】:

  • 如果你愿意放弃 sklearn,你可以试试miceforest

标签: python dataframe missing-data sklearn-pandas


【解决方案1】:

IterativeImputer 行为可以根据随机状态而改变。可以设置的随机状态也称为“种子”。

如文档所述,当将sample_posterior 设置为True 并更改随机种子(即参数random_state)时,我们可以获得多重插补。

这是一个如何使用它的示例:

import numpy as np
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer

X_train = [[1, 2],
           [3, 6],
           [4, 8],
           [np.nan, 3],
           [7, np.nan]]
X_test = [[np.nan, 2],
          [np.nan, np.nan],
          [np.nan, 6]]

for i in range(3):
    imp = IterativeImputer(max_iter=10, random_state=i, sample_posterior=True)
    imp.fit(X_train)
    print(f"imputation {i}:")
    print(np.round(imp.transform(X_test)))

它输出:

imputation 0:
[[ 1.  2.]
 [ 5. 10.]
 [ 3.  6.]]
imputation 1:
[[1. 2.]
 [0. 1.]
 [3. 6.]]
imputation 2:
[[1. 2.]
 [1. 2.]
 [3. 6.]]

我们可以观察到三种不同的插补。

【讨论】:

  • 将三个插补合并到一个集合中是否正确?如果是这样,您将如何实现这一目标?我可能误解了您的解释,但看起来我将创建 3 个不同的数据集,每个数据集代表不同的插补种子。
  • 它确实在创建 3 个不同的数据集。如何使用它取决于您的最终任务(分类、回归等,还是只是推断特征的缺失值?)。我建议再问一个问题,交叉验证可能比堆栈溢出更好。
  • @GlennG。你能弄清楚如何将数据集汇集到一个数据集中吗?我目前也处于相同的位置,并想填补我的特征中的缺失值。
猜你喜欢
  • 2020-09-08
  • 2017-05-01
  • 2016-11-19
  • 2021-01-26
  • 1970-01-01
  • 2014-10-18
  • 1970-01-01
  • 1970-01-01
  • 2019-08-09
相关资源
最近更新 更多