SVM:缩放数据集会给出更糟糕的结果吗?

时间:2014-03-20 22:10:14

标签: python scikit-learn svm

我有一个多类分类问题。我的数据集(让我们的呼叫数据X和标签 - y)表示640x480图像上的点集,因此X中的所有元素都是有效像素范围内的整数。我试图使用SVM来解决这个问题。如果我对数据集运行SVM,则会提供 74%的准确性。但是,如果我数据扩展到范围[0..1],则会产生更差的结果 - 只有 69%的正确结果。

我仔细检查了X及其缩放版Xs中元素的直方图,它们是相同的。因此数据不会被破坏,只是标准化。知道SVM背后的想法我认为缩放不应该影响结果,但确实如此。那么为什么会这样呢?


这是我的代码,以防我在其中犯了错误:

>>> from sklearn.cross_validation import cross_val_score
>>> from sklearn.svm import SVC
>>> 
>>> X, y = ...
>>> Xs = X.astype(np.float32) / (X.max() - X.min())    
>>> cross_val_score(SVC(kernel='linear'), X, y, cv=10).mean()
0.74531073446327667
>>> cross_val_score(SVC(kernel='linear'), Xs, y, cv=10).mean()
0.69485875706214695

1 个答案:

答案 0 :(得分:1)

缩放肯定会影响结果,但它应该改进它们。然而,SVM的性能关键取决于其C设置,其设置了训练集上的错误分类与模型简单性的成本,并且应该使用例如grid search and nested cross-validation。对于任何给定的问题,默认设置很少是最佳的。