使用sklearn IterativeImputer类为MICE估算缺失值

时间:2019-10-29 18:03:17

标签: python dataframe missing-data sklearn-pandas

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

  

我们的IterativeImputer实施受到R MICE的启发   包(通过链式方程进行的多元插补)[1],但   与之不同之处在于,它返回一个插补而不是多个插补   归因。但是,IterativeImputer也可以用于多个   通过将其重复应用于相同的数据集   sample_posterior = True

时可以得到不同的随机种子

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

1 个答案:

答案 0 :(得分:2)

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.]]

我们可以观察到三种不同的推定。