从我的研究中,我发现了三个相互矛盾的结果:

  • SVC(kernel="linear") is better
  • LinearSVC is better
  • Doesn't matter

  • 有人可以解释何时使用LinearSVCSVC(kernel="linear")吗?

    看起来LinearSVC略胜于SVC,并且通常更为挑剔。但是,如果scikit决定花时间在实现线性分类的特定情况下,为什么LinearSVC不会超过SVC

    最佳答案

    从数学上讲,优化SVM是一个凸优化问题,通常使用唯一的最小化器。这意味着该数学优化问题只有一种解决方案。

    结果的差异来自几个方面:SVCLinearSVC可以优化同一问题,但实际上所有liblinear估计量都会对截距进行惩罚,而libsvm估计量则不会(IIRC)。这导致了不同的数学优化问题,从而导致了不同的结果。可能还存在其他细微的差异,例如缩放比例和默认损失函数(编辑:确保在loss='hinge'中设置LinearSVC)。接下来,在多类分类中,默认情况下liblinear做一对一休息,而libsvm做一对一休息。
    SGDClassifier(loss='hinge')在使用随机梯度下降而不是精确梯度下降并且可能不会收敛到同一解的意义上与其他两种不同。但是,所获得的解决方案可能会更好地推广。

    SVCLinearSVC之间,一个重要的决策标准是LinearSVC趋向于收敛更快,样本数量越大。这是因为线性核是一种特殊情况,它在Liblinear中进行了优化,但在Libsvm中没有进行优化。

    关于machine-learning - 什么时候应该使用LinearSVC或SVC?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35076586/

    10-12 13:54