使用skLearning IterativeImputer类为鼠标输入遗漏的值

问题描述

我正在尝试学习如何实现MICE来输入我的数据集的缺失值。我听说过Fancyimpute的鼠标,但我也读到Sklearn的IterativeImputer类可以实现类似的结果。摘自SkLearning的文档:

我们实现IterativeImputer的灵感来自R MICE Package(链式方程的多元推算)[1],但是 与它的不同之处在于,它返回单个补偿而不是多个 推卸责任。但是,IterativeImputer也可以用于多个 通过将其重复应用于相同的数据集 Sample_After=True时的不同随机种子

我见过在不同的管道中使用"种子",但我对它们的理解还不够深入,无法在我自己的代码中实现它们。我想知道有没有人能解释一下,并提供一个如何使用skLearning的IterativeImputer来实现小鼠种子的例子?谢谢!


解决方案

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

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

相关文章