目标编码:编码之前或之后的缺失值插补

数据挖掘 特征工程 编码 数据插补
2022-01-26 13:27:31

我想为我的分类特征执行目标编码,尽管如果其中任何一个有缺失值,我不确定何时执行数据插补。假设我有几个连续特征,Cnt1-Cnt5(没有 NA)和两个分类特征 Cat1 和 Cat2,其中 Cat2 有缺失值。我们还假设我想使用随机森林作为插补方法。哪种方法是正确的?

  1. Impute Cat2 将 Cat1 和 Cnt1-Cnt5 视为 RF 中的预测变量,然后对分类变量执行目标编码。

  2. 针对非缺失和 Cat1 对 Cat2 进行目标编码,为 Cat2 构建 RF 并估算缺失(现在是数字,而不是分类)。

  3. 还有其他方法吗?

我们可以概括这个问题并询问我们是否应该在目标编码之前或之后为任何类型的变量(包括连续变量)估算缺失?

我看到了目标编码后插补的至少一个好处——如果测试数据中存在看不见的分类变量级别(这将导致在执行目标编码后测试集中出现 NA),那么这些将很容易被构建在训练数据,没有由于新级别而导致的任何潜在错误。

1个回答

如果要执行 TargetEncoder,则必须先估算缺失值。

  1. 首先,您应该将分类特征转换为int、 使用LabelEncoderOrdinalEncoderNaN在运行之前,我使用了一个巨大的数值(我的选择:8888)来填充这些值OrdinalEncoder然后将你的矩阵转换为int,它会更有效率。

  2. 对于缺失值的估算,您可以使用不同的策略:

    2.1。. 填写每个特征(列)中最常见的值(如果您完成了上一阶段,则不需要此)。如果您执行 TargetEncoding,最频繁的插补通常效果很好。

    2.2. . 使用IterativeImputer填充您可以在参数中提供estimator要使用的内核(我测试了 RandomForestRegressor - 用于数字特征)。警告:IterativeImputer 仅使用回归内核。如果您完成了上一阶段,请不要忘记添加参数 : missing_values=8888

您现在可以应用您的 TargetEncoder。