在模型验证之前或之内进行特征归一化?


52

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

  1. 为了数字稳定,请避免使用较小的模型权重。
  2. 确保优化算法(例如共轭梯度)的快速收敛,以使一个预测变量维的数量级过大而不会导致缓慢收敛。

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

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


Answers:


46

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

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

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


我觉得这有点令人困惑。OP说他正在对验证和测试数据集进行功能归一化。您的回复首先表明他的方法是正确的。然后,您说“这不是需要将归一化参数的计算限制在训练集中”,这不是他在做什么。因此,您的回答会告诉他他在做什么,这是自相矛盾的,然后提出其他建议。我在这里想念什么?
mahonya

4
OP在他的最后一段中做了描述,而这正是我所说的。当然,如果已经将标准化应用于测试/验证集,则将其应用于测试/验证集。重要的是,此归一化的参数仅是根据训练数据计算的,而不是根据整个集合计算的。希望这可以帮助。
steffen 2014年

嗯,非常感谢。我误会了你的答案。尽管您只是在建议将归一化“应用于”训练集,但这显然不是您所建议的。
mahonya 2014年

2

特征归一化是使相同尺度的不同特征。当一个或多个要素的值比其余要素大得多时,缩放可避免许多额外的迭代,从而加快了梯度下降的速度(不进行缩放,可视化的成本函数将表现出极大的不对称性)。

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


1
我猜想数据归一化可以加快梯度下降的原因是,如果不进行归一化,则rss具有椭圆形轮廓,因此在固定学习率的情况下,可能需要更多迭代才能使梯度下降收敛。而按比例缩放时,rss具有圆形轮廓(对称),因此梯度下降快速收敛。我对吗?
牛油果

1

您所描述的方法就像其他人所说的一样。您应该对测试集功能执行与对训练集中功能进行完全相同的转换。

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


很好点!谢谢您的配合。我记得我的研究总是在计算PCA之前对输入矩阵进行归一化。
天行者'16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.