我目前正在使用支持向量机,并将我的培训功能扩展到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。
我想知道,测试集的功能超出了用于训练模型的特性的范围,会带来什么后果?这有问题吗?
发布于 2014-12-03 18:36:00
在每个类中,您将得到特性的值分布。这本身并不是令人关切的理由。
从一个稍微理论化的角度来看,您可以问自己为什么要扩展您的特性,为什么要按照所选择的方式对它们进行缩放。
其中一个原因可能是,已知您的特定训练算法的收敛速度更快(更好),值在0-1左右,而不是包含其他数量级的特性。那样的话,你可能没事。我的猜测是,支持向量机是可以的:您希望避免由于内部产品过多的数字,但是最大值1.2对最大值1.0不会有太大的区别。
(OTOH,如果你知道你的算法不接受负值,你显然就有麻烦了。)
实际的问题是,对于稍微超出训练范围的情况,您的模型是否表现良好。我认为,这是最好的,而且可能只能通过这样的测试案例来回答/在训练领域之外的情况下检查测试结果的性能下降。这是一个有效的关注,调查这将是验证您的模型的一部分。
观察到您所描述的大小的差异是IMHO的一个原因,让我们仔细观察模型的稳定性。
发布于 2014-12-03 05:00:30
这是作为一个评论,但它太长了。
您的测试集具有不同的范围这一事实可能表明培训集不是测试集的良好表示。然而,如果差别真的很小,就像在你的例子中一样,它很可能不会影响你的预测。不幸的是,我认为我没有充分的理由认为它不会影响支持向量机在任何情况下。
请注意,使用MinMaxScalar的理由是(根据文档):
使用这种缩放的动机包括对非常小的特征标准差的鲁棒性,以及在稀疏数据中保持零项。
因此,确保您的数据符合这种情况是非常重要的。
如果您真正关心的是有一个不同的范围,您应该使用一个常规的标准化(如preprocessing.scale)。
https://datascience.stackexchange.com/questions/2582
复制相似问题