我们也应该对测试数据应用归一化吗?


17

我正在做一个关于作者识别问题的项目。我已经将tf-idf规范化用于训练数据,然后在该数据上训练了一个svm。

现在,当使用分类器时,我也应该标准化测试数据。我认为规范化的基本目的是使学习算法在学习时更加重视更重要的功能。因此,一旦经过培训,它就已经知道哪些功能很重要,哪些功能不重要。那么,是否还需要将规范化应用于测试数据?

我是这个领域的新手。因此,请忽略该问题是否显得愚蠢?


4
您的测试数据应与训练数据的规模相同。
乔恩

Answers:


37

是的,如果您的算法适用于或需要标准化的训练数据*,则需要对测试数据应用标准化。

那是因为您的模型可以使用其输入向量所给出的表示。这些数字的标度是表示的一部分。这有点像在英尺和米之间转换。。。模型或公式通常只适用于一种类型的单位。

您不仅需要归一化,还应该应用与训练数据完全相同的缩放比例。这意味着存储与训练数据一起使用的比例和偏移,然后再次使用。初学者常见的错误是单独规范化训练和测试数据。

在Python和SKLearn中,您可以使用Standard Scaler来标准化输入/ X值,如下所示:

scaler = StandardScaler()
train_X = scaler.fit_transform( train_X )
test_X = scaler.transform( test_X )

请注意,如何train_X使用适合的函数进行转换(确定参数)然后进行规范化。test_X转换只是使用从火车数据中学到的参数进行转换。

您正在应用的tf-idf归一化应该以类似的方式工作,因为它会从整个数据集中学习一些参数(所有文档中单词的频率),并使用每个文档中的比率。


*某些算法(例如基于决策树的算法)不需要标准化的输入,并且可以处理具有不同固有比例的特征。


+1解释测试的标准化参数应与训练中确定的参数相同。据我了解,该逻辑也适用于任何验证集。
Greenstick

@Greenstick:是的,当然可以扩展到处理输入到模型中的所有数据。如果模型将用于生产中的推断,则包括新数据。我认为答案虽然足够长,但却没有涵盖所有内容,而且您将验证数据分开的点变化很大(许多模型已将其内置到训练步骤中),因此无法显示代码示例。
尼尔·斯莱特

2
您是否应该使用训练数据缩放(适合转换)测试数据?还是单独使用相同的比例尺(scaler.transform)?
鲍勃·埃伯特

2
@BobEbert:您可以选择两者之一。从技术上讲,如果您确实使定标器适合组合数据集,那么您可能会从测试到训练泄漏少量信息-因此“正式”版本可能仅使定标器适合训练数据,并将其应用于所有其他数据之后的数据集。但是,这种泄漏非常小,而且我从未见过,如果您使缩放器适合所有数据,就不会在实际中引起问题。
尼尔·斯莱特

感谢您确认我的假设,即我需要对测试数据使用训练集衍生的缩放比例。但是,您能否提供包含此背后解释的链接?编辑:请不要介意,说明现在的位置:datascience.stackexchange.com/questions/58597/...
crazysantaclaus

6

绝对应该对数据进行标准化。您出于以下目的将数据标准化:

  • 具有相同比例的不同特征,用于加速学习过程。

  • 无需维护规模即可公平地维护各种功能。

训练后,您的学习算法已学会按比例处理数据,因此您必须使用用于训练数据的归一化参数对测试数据进行归一化。

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.