LInearSVC vs. SVC(kernel='linear'): Widersprüchliche Argumente?
Aus meiner Forschung, fand ich drei widersprüchliche Ergebnisse:
Kann mir jemand erklären, Wann LinearSVC
vs. SVC(kernel="linear")
?
Wie es scheint, LinearSVC ist geringfügig besser als SVC und ist in der Regel eher pingelig. Aber wenn scikit
beschlossen, verbringen Zeit an der Umsetzung eines konkreten Fall für lineare Klassifikation, warum würden Sie nicht LinearSVC
übertreffen SVC
?
Es ist nicht so, dass scikit-learn entwickelt, eine dedizierte Algorithmus für die lineare SVM. Vielmehr, Sie implementiert die Schnittstellen auf der Oberseite zwei populäre Implementierungen. Die zugrunde liegende C-Implementierung für
Möglich, Duplikat der Unter den Parametern, die SVC und LinearSVC in scikit-learn äquivalent?
LinearSVC
ist liblinear, und der solver für SVC
ist libsvm. Eine Dritte ist, ist die Implementierung ist SGDClassifier(loss="hinge")
.Möglich, Duplikat der Unter den Parametern, die SVC und LinearSVC in scikit-learn äquivalent?
InformationsquelleAutor THIS USER NEEDS HELP | 2016-01-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mathematisch, die Optimierung eines SVM ist eine konvexe optimierungsaufgabe, in der Regel mit einem einzigartigen minimizer. Dies bedeutet, dass es nur eine Lösung für dieses mathematische Optimierungsproblem.
Die Unterschiede in den Ergebnissen ergeben sich aus mehreren Aspekten:
SVC
undLinearSVC
sind optimieren soll, das gleiche problem, aber in der Tat alleliblinear
Schätzer bestrafen, das abfangen, in der Erwägung, dasslibsvm
diejenigen, die nicht (IIRC). Dies führt zu einem anderen mathematischen optimierungsproblems und damit unterschiedliche Ergebnisse. Es gibt vielleicht auch andere subtile Unterschiede wie die Skalierung und die Standard-Verlust-Funktion (Bearbeiten: stellen Sie sicher, dass Sieloss='hinge'
imLinearSVC
). Weiter, in der multiclass Klassifizierungliblinear
hat one-vs-rest standardmäßig in der Erwägung, dasslibsvm
hat one-vs-one.SGDClassifier(loss='hinge')
unterscheidet sich von den beiden anderen in dem Sinne, dass es verwendet stochastic gradient descent und nicht exakt gradient descent und kann nicht konvergieren auf die gleiche Lösung. Jedoch die erhaltene Lösung generalisieren besser.Zwischen
SVC
undLinearSVC
ein wichtiges Entscheidungskriterium ist, dassLinearSVC
neigt dazu, schneller zu konvergieren, je größer die Anzahl der Proben ist. Dies ist aufgrund der Tatsache, dass der lineare kernel ist ein Spezialfall, der ist optimiert für in Liblinear, aber nicht in Libsvm.InformationsquelleAutor eickenberg
Ist das eigentliche problem in der problem mit scikit-Ansatz, wo Sie rufen Sie SVM etwas die nicht SVM. LinearSVC ist eigentlich die Minimierung der quadrierten Scharnier Verlust, anstatt nur das Scharnier Verlust, zudem er bestraft die Größe des bias (die ist nicht SVM), für weitere details siehe andere Frage:
Unter den Parametern, die SVC und LinearSVC in scikit-learn äquivalent?
So das man verwenden? Es ist rein spezifisches problem. Wegen des no free lunch-theorem ist es unmöglich zu sagen, "das Verlust-Funktion ist die beste, Punkt". Manchmal squared loss funktioniert besser, manchmal normalen Scharnier.
wie gesagt - dies ist auch zu bestrafen bias, beziehen sich auf meine andere Antwort
Ja, also diese Frage ist so ziemlich ein Duplikat von dem, was Sie schon beantwortet habe. Aber es ist wichtig zu beachten, dass
LinearSVC
ist nicht nutzlos - es sollte besser skaliert als der generische kernel-Methoden.sicher, "no free lunch" - theorem, jeder Klassifizierer hat seine Nische
InformationsquelleAutor lejlot