执行特征规范化时的数据窥探、信息泄漏

数据挖掘 机器学习 交叉验证
2022-03-03 14:54:16

假设我们有一个训练数据集(有特征和标签)和一个测试数据集(只有特征)。

当我们建立一个需要对特征进行归一化的机器学习模型时,正确的归一化方法(防止信息泄露)是只使用训练数据集。即,错误的归一化方式是将训练(排除Y列)和测试数据集叠加在一起,进行归一化(即使用整个训练+测试数据集的均值和方差)。这里的直觉非常清楚:如果您想在生产中获得模型性能的无偏估计,那么当您训练模型时,您不应该在测试数据集中灌输任何用于衡量实际性能的信息你的模型。

我的问题是:当我们正确训练了模型并准备使用该模型进行预测时,我们应该如何对测试数据集进行归一化?我认为对测试数据集进行归一化的正确方法是:使用从训练数据集获得的均值和方差对测试数据集进行归一化。

但是,为什么不使用自己的均值和方差对测试数据进行归一化呢?或者为什么不将训练和测试数据集堆叠在一起,并使用整体均值和方差来标准化测试数据集?在预测阶段,我对数据窥探和信息泄露的想法和直觉还不清楚。

1个回答

您在训练中拟合的归一化参数现在是您模型的一部分。您在训练数据上拟合了模型权重:归一化步骤现在是模型的一部分,该步骤的“参数”是训练数据的均值和方差,而不是测试数据。

为了使这一点更具体,让我们假设这个模型正在生产中。您可以根据可用的任何训练数据来拟合模型,现在它作为评分服务运行。您可以随着时间的推移评估您的模型准确性,因为您评分的数据被标记为基本事实,但您只是在评估模型而不是重新拟合它。你如何规范这些传入的预测?您将需要使用用于拟合模型的任何数据集的均值和方差。如果您更愿意使用最后的 K 个观测值来估计均值/方差,那么这就是您在拟合模型时需要测试的过程。