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

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

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

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

谁能解释一下什么时候使用 LinearSVC 与。SVC(kernel="linear")?

貌似LinearSVC比SVC略胜一筹,而且通常比较精细。但如果 scikit 决定花时间去实现线性分类的具体案例,为什么不将 LinearSVC 胜过 SVC?

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

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

结果的差异来自于几个方面。SVCLinearSVC 应该是优化同一个问题,但事实上,所有的 liblinear 估计器对截距进行惩罚,而 libsvm 的没有(IIRC)。这就导致了不同的数学优化问题,从而导致不同的结果。也可能有其他微妙的差异,比如缩放和默认损失函数(编辑:确保你设置了 loss='hinge'LinearSVC). 其次,在多类分类中。liblinear 默认为onevs-rest,而 libsvm 做的是一对一。

SGDClassifier(loss='hinge') 与其他两种方法不同的是,它使用的是随机梯度下降法,而不是精确梯度下降法,可能不会收敛到相同的解。然而得到的解可能具有较好的普适性。

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


10
投票

实际的问题是在 弊端,他们把SVM称为什么 这不是SVM. LinearSVC实际上是在最小化铰链损失的平方,而不仅仅是铰链损失,此外,它还惩罚了偏置的大小(这 不是SVM),更多细节请参考其他问题。Scikit -learn中的SVC和LinearSVC在什么参数下是等价的?

那么该用哪个呢?这纯粹是 具体问题. 由于没有免费的午餐定理,不可能说 "这个损失函数是最好的,就这样"。有时平方损耗会更好,有时是普通铰链。

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