首页 > 解决方案 > 迭代 Imputer 为给定列的所有 NaN 提供相同的输出值

问题描述

我目前有一个大约 350 列的数据框。我想使用迭代估算器和ExtraTreesRegressor. 我创建了一个较小的数据框,其中包含感兴趣的特征。我的数据框看起来像:

在此处输入图像描述

我想估算 NaNfirst_seen_days但是我遇到的问题是所有 NaN 都使用相同的值进行估算。我希望每个 NaN 都被赋予不同的值。这是我的代码:

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)

标签: pythonpandasscikit-learn

解决方案


我已经尝试复制您的问题。我可以使用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

推荐阅读