【发布时间】:2019-01-07 17:40:42
【问题描述】:
我有一个多类分类问题。我的数据集(我们称之为数据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
【问题讨论】:
标签: python scikit-learn svm