Итеративный вменитель, дающий одинаковое выходное значение для всех NAN для данного столбца

#python #pandas #scikit-learn

Вопрос:

В настоящее время у меня есть фрейм данных с ~350 столбцами. Я хочу вменить NAN в один из этих столбцов, используя несколько других столбцов, используя итеративный вменитель и ExtraTreesRegressor . Я создал меньший фрейм данных, содержащий интересующие функции. Мой фрейм данных выглядит так:

введите описание изображения здесь

Я хочу вменить NANS, first_seen_days однако проблема, с которой я сталкиваюсь, заключается в том, что все NANS вменяются с использованием одного и того же значения. Я ожидаю, что каждому нанометру будет вменено разное значение. Это мой код:

 data_interpolation = df_sample[["first_seen_days","domain_relevant_info_id", 
             "reason_id", "score.1", "status_id"]]

imp = IterativeImputer(random_state = 0)

imp.fit(data_interpolation)
X = data_interpolation

data_interpolation["first_seen_days"] = imp.transform(X)
 

Ответ №1:

Я попытался воспроизвести вашу проблему. Я могу вменять разные значения, используя ExtraTreesRegressor . Исходя из этого, ваша проблема может быть связана с неотъемлемым свойством ваших данных.

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

np.random.seed(0)
X = np.random.rand(20, 5)
df = pd.DataFrame(X, columns = ["A", "B", "C", "D", "E"])
#randomly assign these indexes nan
for i in [3, 5, 7, 15]:
    df.iloc[i]["A"] = np.nan

##imputation - part of code from the question
imp = IterativeImputer(estimator=ExtraTreesRegressor(), random_state = 0)
imp.fit(df)
X = df
df["A"] = imp.transform(X)
#imputed values
print(df.iloc[[3, 5, 7, 15]]["A"])

#output
3     0.706066
5     0.561352
7     0.776586
15    0.550094