Von der documentation scikit-learn implementiert SVC, NuSVC und LinearSVC, die Klassen sind, die in der Lage sind, eine Mehrklassenklassifizierung für ein Dataset durchzuführen. Auf der anderen Seite habe ich auch gelesen, dass scikit learn auch libsvm für Support Vector Machine-Algorithmus verwendet. Ich bin ein wenig verwirrt darüber, was der Unterschied zwischen SVC und libsvm Versionen ist, jetzt denke ich, der Unterschied ist, dass SVC ist der Support Vector Machine Algorithmus für die Multiclass-Problem und libsvm ist für die binäre Klasse Problem. Könnte mir jemand helfen, den Unterschied zwischen diesen beiden zu verstehen?Was ist der Unterschied zwischen SVC und SVM in scikit-learn?
Antwort
Sie sind nur verschiedene Implementierungen des gleichen Algorithmus. Das SVM-Modul (SVC, NuSVC, usw.) ist ein Wrapper um die libsvm-Bibliothek und unterstützt verschiedene Kernel, während LinearSVC
auf liblinear basiert und nur einen linearen Kernel unterstützt. Also:
SVC(kernel = 'linear')
ist in der Theorie „gleichwertig“:
LinearSVC()
Da die Implementierungen unterscheiden sich in der Praxis werden Sie unterschiedliche Ergebnisse erhalten, die wichtigsten ist, dass LinearSVC unterstützt nur einen linearen Kern, ist schneller und kann viel besser skalieren.
Sie sind eigentlich nicht äquivalent, da SVC eine Eins-gegen-Eins-Strategie verwendet, während LinearSVC eine Eins-gegen-Rest-Strategie für Mehrklassen verwendet. Außerdem ist LinearSVC standardmäßig auf L2-Verlust, also auf den quadratischen Scharnierverlust, eingestellt. –
Andreas weist mit Recht darauf hin, dass sie nicht gleich sind. Als ich "Äquivalent" sagte meinte ich "ähnlich" oder "entspricht", sorry für mein schlechtes Englisch. Unterschiedliche Implementierungen bedeuten abweichende Vorgaben und viele andere Details. – elyase
Für eine Multi-Class-Klassifizierung, welche Vorgehensweise empfehlen Sie mir (eins gegen eins oder eins gegen Rest), glauben Sie, ich kann dieses Problem gut mit SVC angreifen ?. – tumbleweed
Siehe auch den Docstring: http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC SVC ist nur ein dünner Wrapper um libsvm. –