gpt4 book ai didi

scikit-learn - LinearSVC 和 SVC(内核 ="linear")有什么区别?

转载 作者:行者123 更新时间:2023-12-03 14:35:36 24 4
gpt4 key购买 nike

我找到了 sklearn.svm.LinearSVC sklearn.svm.SVC(kernel='linear') 他们看起来和我很相似,但我在路透社上得到的结果却大不相同。

sklearn.svm.LinearSVC: 81.05% in   28.87s train /    9.71s test
sklearn.svm.SVC : 33.55% in 6536.53s train / 2418.62s test

两者都有一个线性内核。 LinearSVC 的容差高于 SVC 之一:
LinearSVC(C=1.0, tol=0.0001, max_iter=1000, penalty='l2', loss='squared_hinge', dual=True, multi_class='ovr', fit_intercept=True, intercept_scaling=1)
SVC (C=1.0, tol=0.001, max_iter=-1, shrinking=True, probability=False, cache_size=200, decision_function_shape=None)

否则这两个功能有何不同? 即使我设置了 kernel='linear , tol=0.0001 , max_iter=1000 and Decision_function_shape='ovr' the SVC takes much longer than线性SVC`。为什么?

我用 sklearn 0.18并且两者都包裹在 OneVsRestClassifier 中.我不确定这是否与 multi_class='ovr' 相同/ decision_function_shape='ovr' .

最佳答案

真的,LinearSVCSVC(kernel='linear')产生不同的结果,i。 e.指标得分和决策边界,因为它们使用不同的方法。下面的玩具示例证明了这一点:

from sklearn.datasets import load_iris
from sklearn.svm import LinearSVC, SVC

X, y = load_iris(return_X_y=True)

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

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

print('LinearSVC score %s' % score_1)
print('SVC score %s' % score_2)

--------------------------
>>> 0.96666666666666667
>>> 0.98666666666666669

这种差异的主要原则如下:
  • 默认缩放,LinearSVC最小化平方铰链损失,而 SVC最小化常规铰链损失。可以为 loss 手动定义“铰链”字符串LinearSVC 中的参数.
  • LinearSVC使用 One-vs-All(也称为 One-vs-Rest)多类归约,而 SVC使用 One-vs-One多类减少。还注明 here .此外,对于多类分类问题 SVC适合 N * (N - 1) / 2型号在哪里N是类(class)的数量。 LinearSVC相比之下,简单地适合 N模型。如果分类问题是二元的,那么两种场景都只适合一个模型。 multi_classdecision_function_shape参数没有共同点。第二个是聚合器,它将决策函数的结果转换为 (n_features, n_samples) 的方便形状。 . multi_class是一种建立解决方案的算法方法。
  • LinearSVC 的基础估计量是 liblinear ,这实际上会惩罚拦截。 SVC用途 libsvm 估计量没有。 liblinear 估计器针对线性(特殊)情况进行了优化,因此在大量数据上的收敛速度比 快libsvm .这就是为什么LinearSVC解决问题所需的时间更少。

  • 事实上, LinearSVC正如评论部分所述,截距缩放后实际上并不是线性的。

    关于scikit-learn - LinearSVC 和 SVC(内核 ="linear")有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45384185/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com