哪个先出现?多重插补,拆分为训练/测试,或标准化/标准化

数据挖掘 多类分类 正常化 数据插补
2021-09-23 06:19:15

我正在研究一个多类分类问题,有大约 65 个特征和大约 15 万个实例。30% 的特征是分类的,其余的是数字的(连续的)。我知道在将数据拆分为训练和测试子集应该进行标准化或规范化,但我仍然不确定插补过程。对于分类任务,我计划使用随机森林、逻辑回归和 XGBOOST(它们不是基于距离的)。

有人可以解释一下哪个应该先来吗?拆分>插补或插补>拆分?如果split>imputation是正确的,我应该遵循imputation>standardization还是standardization>imputation

2个回答

在进行任何数据预处理之前始终拆分。在拆分之前执行预处理意味着来自测试集的信息将在训练期间出现,从而导致数据泄漏。

这样想,测试集应该是一种在完全看不见的数据上估计性能的方法。如果它影响了训练,那么它将是部分看到的数据。

我认为缩放/估算的顺序没有那么严格。如果该方法可能会引发缩放/居中,我将首先进行估算。

你的步骤应该是:

  1. 分裂
  2. 插补
  3. 缩放

以下是一些相关的问题来支持这一点:

拆分为训练和测试之前或之后的插补?

在居中和缩放之前或之后对缺失数据进行插补?

如果您在拆分之前进行估算/标准化,然后拆分为训练/测试,那么您会将测试集中的数据(应该完全保留)泄漏到训练集中。这将在模型性能上产生极其有偏差的结果。

正确的方法是先拆分数据,然后使用插补/标准化(顺序取决于插补方法是否需要标准化)。

这里的关键是你正在学习从训练集开始的所有内容,然后“预测”到测试集。对于标准化/标准化,您从训练集中学习样本均值和样本标准差,将它们视为常数,并使用这些学习值转换测试集。您不会在任何这些计算中使用测试集平均值或测试标准差。

对于插补,这个想法是相似的。您仅从训练集中学习所需的参数,然后预测所需的测试集值。

这样,您的性能指标不会因您的方法无意中看到测试集的观察结果而偏向乐观。