LinearSVC() 与 SVC(kernel='linear')
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LinearSVC() 与 SVC(kernel='linear')相关的知识,希望对你有一定的参考价值。
参考技术A LinearSVC() 与 SVC(kernel='linear') 的区别概括如下:sklearn.svm.LinearSVC(penalty='l2', loss='squared_hinge', dual=True, tol=0.0001, C=1.0, multi_class='ovr', fit_intercept=True, intercept_scaling=1, class_weight=None, verbose=0, random_state=None, max_iter=1000)
注意:底层 C 实现使用随机数选择特征,因此,对于相同的输入可能会得到不同的结果。liblinear使用稀疏的数据表示,会产生内存拷贝。
线性模型有线性决策边界(交叉的超平面),而非线性核模型(多项式或者高斯RBF)的弹性非线性决策边界的形状由核种类和参数决定。
scikit learn中的SVC vs LinearSVC:损失函数的区别
【中文标题】scikit learn中的SVC vs LinearSVC:损失函数的区别【英文标题】:SVC vs LinearSVC in scikit learn: difference of loss function 【发布时间】:2021-01-23 05:26:15 【问题描述】:根据this post,scikit learn中的SVC和LinearSVC有很大的不同。但是看official scikit learn documentation的时候,就不是那么清楚了。
特别是对于损失函数,似乎有一个等价性:
而this post 说 le 损失函数是不同的:
SVC:1/2||w||^2 + C SUM xi_i
线性SVC:1/2||[w b]||^2 + C SUM xi_i
似乎在LinearSVC的情况下,截距是正则化的,但官方文档却另有说明。
有人知道更多信息吗?谢谢
【问题讨论】:
【参考方案1】:SVC
是LIBSVM 库的包装器,而LinearSVC
是LIBLINEAR 的包装器
LinearSVC
通常比SVC
快,并且可以处理更大的数据集,但它只能使用线性内核,因此得名。所以区别不在于表述,而在于实现方式。
引用LIBLINEAR
FAQ:
When to use LIBLINEAR but not LIBSVM
There are some large data for which with/without nonlinear mappings gives similar performances.
Without using kernels, one can quickly train a much larger set via a linear classifier.
Document classification is one such application.
In the following example (20,242 instances and 47,236 features; available on LIBSVM data sets),
the cross-validation time is significantly reduced by using LIBLINEAR:
% time libsvm-2.85/svm-train -c 4 -t 0 -e 0.1 -m 800 -v 5 rcv1_train.binary
Cross Validation Accuracy = 96.8136%
345.569s
% time liblinear-1.21/train -c 4 -e 0.1 -v 5 rcv1_train.binary
Cross Validation Accuracy = 97.0161%
2.944s
Warning:While LIBLINEAR's default solver is very fast for document classification, it may be slow in other situations. See Appendix C of our SVM guide about using other solvers in LIBLINEAR.
Warning:If you are a beginner and your data sets are not large, you should consider LIBSVM first.
【讨论】:
不同之处不仅在于速度,还在于它们的不同。我做了一个简单的例子here。你也可以阅读this 我的问题是关于两个分类器的损失函数。谢谢 更多实现细节可以在原文LIBLINEAR
paper的附录中找到
post中的答案是正确的。 LIBLINEAR
确实包含优化中的偏差项,而 LIBSVM
没有。
SVC
默认为 L1 损失和 L2 惩罚。这就是为什么您可以在两者的结果几乎相等时创建条件,如果您为LinearSVM
和loss="hinge"
和intercept_scaling
设置足够大。偏置项包含在LIBLINEAR
中,因为权重向量隐式扩展为w=[w;b]
。如果在优化之前将数据居中,它应该有效地将偏差设置为零。以上是关于LinearSVC() 与 SVC(kernel='linear')的主要内容,如果未能解决你的问题,请参考以下文章
LinearSVC 和 SVC(kernel="linear") 有啥区别?
sklearn.svm包中的SVC(kernel=”linear“)和LinearSVC的区别
为啥 SVC、NuSVC 和 LinearSVC 会产生截然不同的结果?