为什么必须使用训练集的均值和标准差对测试集进行标准化?

机器算法验证 机器学习 定心 数据预处理
2022-03-12 08:35:30

在应用机器学习算法之前对数据集进行预处理时,数据可以通过减去变量的平均值来居中,并通过除以标准偏差来缩放。

这在训练集中是一个简单的过程,但在测试集中,这个过程似乎更加临时。我读过从测试集中的每个值中减去的平均值是训练集的平均值,而不是测试集的平均值;标准差也是如此。

这种不对称背后真的有数学需求,还是坚持直到最后才接触测试集的原则的练习——更像是一种“哲学”启发式?

3个回答

当您使用根据训练数据计算的变量的均值和标准差对训练数据中的变量进行居中和缩放时,您实际上是在创建一个全新的变量。然后,您正在对那个全新的变量进行回归。

要使用该新变量来预测验证和/或测试数据集,您必须在这些数据集中创建相同的变量。减去不同的数字并除以不同的数字不会创建相同的变量。

让我解释一下不同的方式。假设您以 m 为单位测量距离。所以 X = 以米为单位的距离。但这很麻烦,因为 X 的某些值是 50,000。因此,您创建了一个新变量,X1 = 以公里为单位的距离。您通过将 X 除以 1000 获得 X1 的值。现在您基于 X1 构建模型。您还必须通过将 X 除以 1000 在测试数据中创建 X1。如果除以 1001 或 5,000,则不是创建 X1,而是创建具有完全不同定义的 X2。如果您在测试数据中使用 X2 而不是 X1,则任何基于训练数据中 X1 构建的模型都将不起作用。

现在,居中和缩放正在创建一个新变量。您不必使用训练数据的均值和标准差。在拆分为训练与测试之前,您可以使用整个数据集的均值和标准差。您可以使用测试数据的平均值和标准差。您可以使用接近均值和接近标准差的数字。您不必完美地居中和缩放以在设计矩阵中创建更多稳定性。底线是,如果您创建 X1 = (X-5)/2.865,然后使用训练数据构建一个以 X1 作为预测变量的模型,那么如果您在测试数据中创建 X2 = (X-5.375)/2,并且然后表现得像 X1 一样的新变量,你的模型将不会像它应该的那样表现,这是对模型的不恰当使用。

为什么要使用训练数据集的均值和标准差来标准化测试数据集?

测试数据集的均值和标准差可能是这样的,在用这些值对其进行标准化后,一些测试数据点最终将具有与标准化训练数据集的一些(但不同)训练数据点相同的值(由其标准化)自己的平均值和标准)。有关演示这一点的示例,请参见此处。

相反,测试数据集可以包含也包含在训练数据集中的数据点,如果我们通过测试数据集的均值和标准对测试数据集中的数据点进行标准化,将训练数据集中的数据按均值标准化和训练数据集的标准差,它们最终将具有不同的值(假设训练数据集和测试数据集的均值和标准差不同)。

尽管这两种情况是高度假设的,但它们证明了通过对两个不同的数据点执行不同的转换可以得到相同的数据点,而两个相同的数据点(一个来自训练数据集,一个来自测试数据集)在转换后最终可能不同.