特征缩放的后果


11

我目前正在使用SVM,并将训练功能扩展到[0,1]的范围。我首先调整/变换训练集,然后将相同的变换应用于测试集。例如:

    ### Configure transformation and apply to training set
    min_max_scaler = MinMaxScaler(feature_range=(0, 1))
    X_train = min_max_scaler.fit_transform(X_train)

    ### Perform transformation on testing set
    X_test = min_max_scaler.transform(X_test)

假设训练集中的给定特征的范围为[0,100],而测试集中的相同特征的范围为[-10,120]。在训练集中,该特征将被适当地缩放为[0,1],而在测试集中,该特征将被缩放到最初指定的范围之外的范围,例如[-0.1,1.2]。

我想知道测试集功能超出用于训练模型的功能范围会带来什么后果?这有问题吗?

Answers:


6

在每个类中,您将具有要素值的分布。这本身并不是引起关注的原因。

从理论上讲,您可以问自己为什么要缩放功能以及为什么要以完全选择的方式缩放功能。
原因之一可能是已知您的特定训练算法收敛速度(更好)在0-1左右,而不是覆盖其他数量级的特征。在这种情况下,您可能还好。我的猜测是您的SVM很好:由于内部乘积,您想避免太大的数字,但是最大1.2与最大1.0的差别不大。
(OTOH,如果您例如知道自己的算法不接受负值,那么您显然会遇到麻烦。)

实际的问题是,对于稍微超出训练范围的案例,您的模型是否表现良好?我认为,最好的方法可能是通过在这种情况下进行测试/检查测试结果以解决培训领域以外的性能下降来最好地解决。这是一个有效的问题,对此进行调查将是模型验证的一部分。

恕我直言,观察您描述的大小差异是仔细研究模型稳定性的原因。


7

这只是作为评论,但太长了。

测试集范围不同的事实可能表明训练集不能很好地代表测试集。但是,如果差异确实很小(如您的示例中所示),则可能不会影响您的预测。不幸的是,我认为我没有充分的理由认为它在任何情况下都不会影响SVM。

请注意,使用MinMaxScalar的原理是(根据文档):

使用这种缩放的动机包括对特征的很小标准偏差的鲁棒性以及在稀疏数据中保留零项。

因此,对您来说确保数据适合这种情况很重要。

如果您确实担心存在差异范围,则应改用常规标准化方法(例如preprocessing.scale)。


罗伯特你好,谢谢你的答复!关于训练/测试集表示的要点,但这是时间序列数据,因此随着新数据的出现,我不能保证值的范围将与之前的值相似。我和您有完全相同的感觉,我没有充分的理由认为它在任何情况下都不会影响SVM。
mike1886

您是否使用MinMaxScaler和标准化比较了预测?
罗伯·史密斯

我得到的结果是相似的,但这并不能真正告诉我MinMaxScalar是否变得麻烦。
mike1886

当然。无论如何,如果您没有从中获得有价值的东西,最好使用标准化MinMaxScaler
罗伯·史密斯
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.