什么时候应该使用LinearSVC或SVC?

问题描述 投票:21回答:2

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

  1. SVC(kernel="linear") is better
  2. SVC(kernel="linear")
  3. LinearSVC is better

有人可以解释何时使用LinearSVCDoesn't matter吗?

似乎LinearSVC比SVC稍好,通常更为挑剔。但是,如果LinearSVC决定花时间实施线性分类的特定情况,那么SVC(kernel="linear")为什么不胜过scikit

machine-learning scikit-learn svm
2个回答
27
投票

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

结果的差异来自几个方面:LinearSVCSVC可以优化同一问题,但实际上,所有SVC估计量都会对截距进行惩罚,而LinearSVC估计量则不会(IIRC)。这导致了不同的数学优化问题,从而导致了不同的结果。可能还存在其他细微的差异,例如缩放比例和默认损失功能(编辑:确保在liblinear中设置了libsvm)。接下来,在多类分类中,默认情况下,loss='hinge'做一对多,而LinearSVC做一对多。

liblinear在使用随机梯度下降而不是精确梯度下降且可能不会收敛于相同解的意义上与其他两个有所不同。但是,所获得的解决方案可能会更好地推广。

libsvmSGDClassifier(loss='hinge')之间,一个重要的决策标准是,SVC趋于收敛更快,样本数量越大。这是因为线性核是一个特例,它在Liblinear中进行了优化,但在Libsvm中没有进行优化。


9
投票

实际问题出在scikit方法问题中,他们称SVM为这不是SVM。 LinearSVC实际上是使平方的铰链损耗最小化,而不仅仅是铰链损耗,此外,它还对偏差的大小(不是SVM进行了惩罚),有关更多详细信息,请参见其他问题:LinearSVC

那么该使用哪个?它完全是特定于问题的。由于没有免费的午餐定理,因此不可能说“这个损失函数是最佳的,周期”。有时平方损失会更好,有时会正常铰链。

© www.soinside.com 2019 - 2024. All rights reserved.