在模型验证之前或之中执行特征归一化?

机器算法验证 机器学习 正常化 标准化
2022-02-13 03:55:56

机器学习中一个常见的良好实践是对预测变量进行特征归一化或数据标准化,就是这样,将数据居中减去均值并将其归一化除以方差(或标准差)。为了自我控制,据我所知,我们这样做是为了实现两个主要目标:

  1. 为了数值稳定性,避免使用特别小的模型权重。
  2. 确保优化算法(例如共轭梯度)的快速收敛,以便一个预测器维度相对于其他维度的大幅度不会导致收敛缓慢。

我们通常将数据分成训练集、验证集和测试集。在文献中,我们通常看到,为了进行特征归一化,他们在整个预测变量集上取均值和方差(或标准差)。我在这里看到的一个大缺陷是,如果你这样做,你实际上是在将未来信息引入训练预测变量,即包含在均值和方差中的未来信息。

因此,我对训练数据进行特征归一化并保存均值和方差。然后,我使用训练均值和方差将特征归一化应用于验证和测试数据集的预测变量。这有什么根本缺陷吗?谁能推荐一个更好的选择?

4个回答

你的方法是完全正确的。尽管数据转换通常被低估为“预处理”,但人们不能足够强调为了优化模型性能而进行的转换可以而且应该被视为模型构建过程的一部分。

推理:模型应应用于通常在模型构建时不可用的看不见的数据。验证过程(包括数据拆分)模拟了这一点。因此,为了获得对模型质量(和泛化能力)的良好估计,需要将归一化参数(均值和方差)的计算限制在训练集上。

我只能猜测为什么在文学中并不总是这样做。一个论点可能是,均值和方差的计算对小的数据变化并不那么敏感(但即使这样也只有在基本样本量足够大并且数据近似正态分布且没有极端异常值的情况下才是正确的)。

特征归一化是将不同的特征做成相同的尺度。当一个或多个特征的值比其他特征大得多时,缩放通过避免许多额外的迭代来加速梯度下降(如果没有缩放,可视化的成本函数将显示出很大的不对称性)。

我认为在测试数据到来时使用训练集中的均值和变量是有道理的。然而,如果数据量很大,训练集和验证集都可以近似地视为正态分布,因此它们大致共享均值和 var。

您描述的方法与其他人所说的一样合理。您应该对测试集特征执行与对训练集特征执行完全相同的转换。

我认为值得补充的是,特征归一化的另一个原因是增强某些对某些变量的规模差异敏感的过程的性能。例如,主成分分析 (PCA) 旨在捕获最大比例的方差,因此,如果最初未执行特征归一化,则将为表现出最大方差的变量赋予更大的权重。

让我说明一下为什么我们必须只对训练数据集进行归一化。假设我们提取苹果不同特征的特征,如长度、苹果周围边界框的呼吸、颜色等,假设我们对特征长度进行归一化在整个数据上,我们的平均长度为 7 厘米,方差为 1 厘米。但如果我们只使用训练数据,我们可能会得到平均值为 6 厘米,方差为 1 厘米。这实际上意味着测试中有大苹果实际上没有在训练数据集中学习的数据集。