Ввод пропущенных значений с использованием класса sklearn IterativeImputer для MICE - PullRequest
1 голос
/ 29 октября 2019

Я пытаюсь узнать, как реализовать MICE при вменении пропущенных значений для моих наборов данных. Я слышал о MICE от fancyimpute, но я также читал, что класс IteraImputer от sklearn может достигать аналогичных результатов. Из документов sklearn:

Наша реализация IterativeImputer была вдохновлена ​​пакетом R MICE (многовариантное вычисление с помощью цепных уравнений) [1], но отличается от него возвратом одного вменения вместо нескольких вменений. Однако IterativeImputer также можно использовать для нескольких вменений, применяя его многократно к одному и тому же набору данных с разными случайными начальными значениями, когда sample_posterior = True

Я видел, как "начальные значения" используются в разных конвейерах, но яникогда не понимал их достаточно хорошо, чтобы реализовать их в своем собственном коде. Мне было интересно, может ли кто-нибудь объяснить и предоставить пример того, как реализовать начальные числа для вменения MICE, используя IterativeImputer sklearn? Спасибо!

1 Ответ

1 голос
/ 30 октября 2019

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

Мы можем наблюдать три различных вменения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...