特征缩放的结果

数据挖掘 机器学习 支持向量机 特征缩放
2021-09-19 05:17:35

我目前正在使用 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]。

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

2个回答

这是作为评论的意思,但它太长了。

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

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

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

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

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

在每个类中,您将拥有特征值的分布。这本身并不是令人担忧的理由。

从稍微理论上的角度来看,您可以问自己为什么要扩展您的功能以及为什么要以完全选择的方式扩展它们。
一个原因可能是已知您的特定训练算法在 0 - 1 左右的值收敛得更快(更好),而不是覆盖其他数量级的特征。在这种情况下,你可能没问题。我的猜测是您的 SVM 很好:由于内积,您希望避免太大的数字,但最大值 1.2 与最大值 1.0 不会有太大区别。
(OTOH,如果你知道你的算法不接受负值,你显然会遇到麻烦。)

实际的问题是,对于稍微超出训练范围的情况,您的模型是否表现良好。我相信最好并且可能只能通过使用此类案例进行测试/检查测试结果以了解培训领域以外案例的性能下降。这是一个有效的问题,调查这将是您模型验证的一部分。

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