众所周知,对于支持向量机,我们可以将SVC以及SGDClassifier与铰链损耗实现一起使用。具有SGD的SGDClassifier具有比铰链损耗更快的实现速度。为什么?
scikit-learn中SVC的两种实现的链接:
SVC
SGDClassifier
我在sci-kit的文档页面上阅读后发现,SVC使用libsvm库的某些算法进行优化。而SGDClassifier使用SGD(显然)。
最佳答案
也许最好开始尝试一些实际案例并阅读代码。开始吧...
首先,如果我们阅读SGDC的文档,它说仅使用线性SVM:
具有SGD训练的线性分类器(SVM,逻辑回归等)
如果使用LinearSVC而不是通常的SVC怎么办?
与带有参数kernel ='linear'的SVC相似,但使用liblinear而不是libsvm来实现,因此它在选择罚分和损失函数时具有更大的灵活性,并且应更好地扩展到大量样本。
让我们为三种类型的算法添加一个示例:
from sklearn.svm import SVC
from sklearn.linear_model import SGDClassifier
from sklearn.svm import LinearSVC
from sklearn import datasets
import numpy as np
iris = datasets.load_iris()
X = np.random.rand(20000,2)
Y = np.random.choice(a=[False, True], size=(20000, 1))
# hinge is used as the default
svc = SVC(kernel='linear')
sgd = SGDClassifier(loss='hinge')
svcl = LinearSVC(loss='hinge')
使用jupyter和命令
%%time
我们可以获得执行时间(您可以在普通的python中使用类似的方式,但这是我的方法):%%time
svc.fit(X, Y)
挂墙时间:5.61 s
%%time
sgd.fit(X, Y)
挂墙时间:24ms
%%time
svcl.fit(X, Y)
挂墙时间:26.5ms
正如我们所看到的,它们之间存在巨大差异,但是线性和SGDC几乎同时存在。时间会有所不同,但这总是会发生,因为每种算法的执行都不是来自同一代码。
如果您对每个实现都感兴趣,建议您使用新的github阅读工具阅读github代码,这真的很好!
linearSVC的代码
SGDC的代码
关于python - 为什么带有铰链丢失的SGDClassifier比scikit-learn中的SVC实现要快,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60061412/