LInearSVC与SVC(内核='线性'):相互矛盾的论点?

THI*_*ELP 20 machine-learning svm scikit-learn

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

  1. SVC(kernel="linear") 更好
  2. LinearSVC 更好
  3. 无所谓

有人能解释时要使用LinearSVCSVC(kernel="linear")

似乎LinearSVC略胜SVC并且通常更挑剔.但如果scikit决定花时间实施线性分类的具体案例,为什么不会LinearSVC超越SVC

eic*_*erg 25

在数学上,优化SVM是凸优化问题,通常具有唯一的最小化器.这意味着这个数学优化问题只有一个解决方案.

结果的差异来自几个方面:SVC并且LinearSVC应该优化同样的问题,但实际上所有的liblinear估计都会惩罚拦截,而libsvm不是(IIRC).这导致不同的数学优化问题并因此导致不同的结果.可能还有其他的细微差别,如缩放和违约损失的功能(编辑:请确保您设置loss='hinge'LinearSVC).接下来,在多类分类中,liblinear默认情况下是one-vs-rest,而是libsvmone-vs-one.

SGDClassifier(loss='hinge')与其他两个不同的是,它使用随机梯度下降而不是精确的梯度下降,并且可能不会收敛到相同的解.然而,获得的解决方案可以更好地概括.

SVC和之间LinearSVC,一个重要的决策标准是,LinearSVC样本数量越大,收敛速度越快.这是因为线性内核是一个特殊情况,它在Liblinear中进行了优化,但在Libsvm中没有.


lej*_*lot 7

实际问题在于scikit方法问题,他们称SVM 不是SVM.LinearSVC实际上是最小化平方铰链损失,而不仅仅是铰链损耗,此外,它会对偏差的大小(不是SVM)进行处罚,更多细节参考其他问题: 在scikit-learn中,SVC和LinearSVC的参数是什么?

那么哪一个使用?这纯粹是针对特定问题的.由于没有免费的午餐定理,所以不可能说"这种损失函数是最好的,期间".有时平方损失会更好,有时正常铰链.