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

数据挖掘 机器学习 神经网络 深度学习
2021-09-29 21:17:13

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

现在在使用分类器时,我也应该对测试数据进行标准化。我觉得归一化的基本目的是让学习算法在学习时更加重视更重要的特征。因此,一旦它经过训练,它就已经知道哪些特征是重要的,哪些不是。那么是否也需要对测试数据应用归一化?

我是这个领域的新手。所以如果这个问题看起来很傻,请忽略?

2个回答

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

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

您不仅需要标准化,而且应该应用与训练数据完全相同的缩放比例。这意味着存储与您的训练数据一起使用的比例和偏移量,然后再次使用它。一个常见的初学者错误是分别标准化你的训练和测试数据。

在 Python 和 SKLearn 中,您可以使用标准缩放器对输入/X 值进行标准化,如下所示:

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

train_X请注意使用适合(找出参数)的函数的转换是如何规范化的。虽然test_X转换只是转换,但使用从训练数据中学到的相同参数。

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


* 一些算法(例如基于决策树的算法)不需要归一化的输入,可以应对具有不同固有尺度的特征。

当然,您应该标准化您的数据。您为了以下目的对数据进行规范化:

  • 为了在相同的尺度上具有不同的特征,这是为了加速学习过程。

  • 为了公平地关心不同的特征而不关心规模。

训练后,您的学习算法已经学会以缩放形式处理数据,因此您必须使用用于训练数据的规范化参数来规范化您的测试数据。