代码之家  ›  专栏  ›  技术社区  ›  ffriend

SVM:缩放的数据集给出了更差的结果?

  •  0
  • ffriend  · 技术社区  · 12 年前

    我有一个 多类别分类 问题我的数据集(我们称之为数据 X 和标签- y )表示640x480图像上的点集,因此 十、 是有效像素范围内的整数。我正在尝试使用SVM来解决这个问题。如果我对数据集运行SVM 按原样 ,其精度为 74% 。然而,如果我 规模 数据到范围 [0..1] ,结果要差得多-仅 69% 正确的结果。

    我仔细检查了元素的直方图 十、 及其缩放版本 Xs ,并且它们是相同的。所以数据没有损坏,只是正常化了。我知道支持向量机背后的想法,我认为缩放不会影响结果,但它确实会影响结果。那么为什么会发生这种情况呢?


    这是我的代码,以防我出错:

    >>> 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 回复  |  直到 7 年前
        1
  •  1
  •   Fred Foo    12 年前

    缩放当然会影响结果,但它会改善结果。然而,支持向量机的性能在很大程度上取决于 C 设置,该设置权衡了训练集错误分类的成本与模型的简单性,并且应该使用例如。 grid search and nested cross-validation 。对于任何给定的问题,默认设置很少是最佳的。