sklearn里LinearSVC与SVC区别
Yuxuan Wu Lv13

这里综合了stackoverflow上的一位发言和另一位知乎用户的文章,链接在下方:

What is the difference between LinearSVC and SVC(kernel=”linear”)?

baiziyu:sklearn.svm.LinearSVC与sklearn.svm.SVC区别

LinearSVC 和 SVC(kernel=’linear’) 会产生不同的结果,例如 不同的分数以及不同的decision boundary, 原因是他们采用了不同的计算方式。下面的代码可以自己运行一下,感受一下不同的地方

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from sklearn.datasets import load_iris
from sklearn.svm import LinearSVC, SVC

X, y = load_iris(return_X_y=True)

clf_1 = LinearSVC(loss='hinge').fit(X, y) # possible to state loss='hinge'
clf_2 = LinearSVC().fit(X, y) # possible to state loss='hinge'
clf_3 = SVC(kernel='linear').fit(X, y)

score_1 = clf_1.score(X, y)
score_2 = clf_2.score(X, y)
score_3 = clf_2.score(X, y)

print('LinearSVC score %s' % score_1)
print('LinearSVC score with hinge loss %s' % score_2)
print('SVC score %s' % score_3)

------------------------
LinearSVC score 0.94
LinearSVC score with hinge loss 0.9666666666666667
SVC score 0.9666666666666667

最主要的不同点:

  • 默认情况下,LinearSVC最小化squared hinge loss,而SVC最小化hinge loss。(上图代码块)
  • LinearSVC是基于liblinear实现的,事实上会惩罚截距(penalize the intercept), 然而,SVC是基于libsvm实现的,并不会惩罚截距
  • liblinear库针对线性的模型进行了优化,因此在大量的数据上收敛速度会高于libsvm。所以LinearSVC在大数据上也能很好的归一化,但是SVC在大量数据上很难收敛
  • LinearSVC使用 (One-vs-All)方式来实现多分类问题,但SVC使用的是One-vs-One的方式来处理多分类的问题
  • Post title:sklearn里LinearSVC与SVC区别
  • Post author:Yuxuan Wu
  • Create time:2021-01-25 19:32:27
  • Post link:yuxuanwu17.github.io2021/01/25/sklearn里LinearSVC与SVC区别/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.