我有一个带有 nan 值的测试和训练数据集。我想使用简单的 imputer 来使用以下代码处理它们。
#numerical values
imp= SImp(strategy= 'median') #or 'mean', 'median', 'most_frequent'
my_df.loc[:, num_cols_nan]= imp.fit_transform(def_df.loc[:, num_cols_nan])
#categorical values
imp= SImp(strategy= 'most_frequent')
my_df.loc[:, cat_cols_nan]= imp.fit_transform(def_df.loc[:, cat_cols_nan])`
我的想法是使用中位数和
most_frequent
来填充NaNs。
但是,浏览网页时我发现有关如何使用输入器的不同信息:
只是为了澄清版本 1. 是最常见的情况,但由于我是一个初学者,所以我在这里有点困惑。
您提到的两种方法都是有效的,可用于在训练和测试集中估算缺失值。不同之处在于训练输入器并将其应用于数据的方式。
方法 1:训练集上的 fit_transform 和测试集上的 transform
在这种方法中,您使用 fit_transform 将插补器拟合到训练集上,它根据训练数据的分布学习插补模型的参数(例如均值、中值、最频繁)。然后,您对测试集使用转换,以使用相同的学习参数来估算测试集中的缺失值。这种方法确保根据训练数据的分布估算测试集,这是大多数情况下的目标。
方法 2:分别在训练集和测试集上进行 fit_transform
在这种方法中,您使用 fit_transform 在训练集和测试集上分别拟合输入器。这意味着插补参数将根据每个集合的分布分别学习,这可能会导致两组之间不同的插补结果。这种方法不太常见,一般不推荐使用,因为它可能会导致对测试集的过度拟合。
一般来说,建议使用方法 1 来估算训练集和测试集中的缺失值。这确保了插补是根据训练数据的分布完成的,这正是我们想要学习的。此外,它确保对训练集和测试集使用相同的插补模型,这对于确保建模过程的一致性非常重要。