我有一个多类分类问题。我的数据集(让我们的呼叫数据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
答案 0 :(得分:1)
缩放肯定会影响结果,但它应该改进它们。然而,SVM的性能关键取决于其C
设置,其设置了训练集上的错误分类与模型简单性的成本,并且应该使用例如grid search and nested cross-validation。对于任何给定的问题,默认设置很少是最佳的。