Ответ 1
Математически оптимизация SVM представляет собой проблему выпуклой оптимизации, обычно с уникальным минимизатором. Это означает, что есть только одно решение этой проблемы математической оптимизации.
Различия в результатах исходят из нескольких аспектов: SVC
и LinearSVC
должны оптимизировать ту же проблему, но на самом деле все оценки liblinear
наказывают перехват, тогда как libsvm
не имеют (IIRC), Это приводит к другой проблеме математической оптимизации и, следовательно, к разным результатам. Могут быть и другие тонкие отличия, такие как масштабирование и функция потери по умолчанию (отредактируйте: убедитесь, что вы установили loss='hinge'
в LinearSVC
). Далее, в классификации многоклассов, liblinear
делает по умолчанию один-vs-rest, тогда как libsvm
делает одно-vs-one.
SGDClassifier(loss='hinge')
отличается от двух других в том смысле, что он использует стохастический градиентный спуск, а не точный градиентный спуск и не может сходиться к одному и тому же решению. Однако полученное решение может лучше обобщаться.
Между SVC
и LinearSVC
одним важным критерием принятия решения является то, что LinearSVC
стремится быстрее сходиться, чем больше число выборок. Это связано с тем, что линейное ядро является частным случаем, оптимизированным в Liblinear, но не в Libsvm.