【问题标题】:SVM: scaled dataset gives worse results?SVM:缩放数据集给出更差的结果?
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • 但是为什么缩放会影响结果呢?如果 SVM 只是简单地构建超平面,那么在我的理解中,在缩放这个超平面的参数之后也应该被缩放。对我来说,这听起来像是缩放只是改变了单位长度,并没有真正改变固有结构,这对 SVM 来说是必不可少的。是吗?
    • @ffriend SVM 解决方案是正则化的,正则化使其与规模相关。
    • 啊,现在我明白了。谢谢。
    猜你喜欢
    • 2020-03-29
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 2013-05-14
    • 1970-01-01
    • 1970-01-01
    • 2018-03-18
    相关资源
    最近更新 更多