Может быть, лучше начать пробовать некоторые практические примеры и прочитать код. Давайте начнем ...
Прежде всего, если мы прочитаем документацию SGD C, в ней будет сказано, что используется только линейный SVM:
Линейные классификаторы (SVM, logisti c регрессия, ао) с обучением SGD
Что если вместо обычного SV C мы используем LinearSV C?
Аналогичен SV C с параметром kernel = 'linear', но реализован в терминах 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 с
%%time
sgd.fit(X, Y)
Время стены: 24 мс
%%time
svcl.fit(X, Y)
Время стены: 26,5 мс
Как мы видим, существует огромная разница между всеми ними, но линейными и SGD C более или менее одинаковое время. Время продолжает немного отличаться, но это всегда будет происходить, поскольку выполнение каждого алгоритма происходит не из одного и того же кода.
Если вас интересует каждая реализация, я предлагаю вам прочитать код GitHub с помощью нового инструмента чтения GitHub, который действительно хорош!
Код linearSV C
Код SGD C