Können Sie den Unterschied zwischen SVC und LinearSVC in scikit-learn erklären?


19

Ich habe kürzlich angefangen zu lernen, mit sklearnetwas zu arbeiten und bin gerade auf dieses merkwürdige Ergebnis gestoßen.

Ich habe den digitsverfügbaren Datensatz verwendet sklearn, um verschiedene Modelle und Schätzmethoden auszuprobieren.

Als ich ein Support Vector Machine-Modell mit den Daten getestet habe, stellte ich fest, dass es zwei verschiedene Klassen sklearnfür die SVM-Klassifizierung gibt: SVCund LinearSVCwobei die erste einen Eins-gegen-Eins- Ansatz und die andere einen Eins-gegen-Ruhe- Ansatz verwendet.

Ich wusste nicht, welche Auswirkungen das auf die Ergebnisse haben könnte, also habe ich beide ausprobiert. Ich habe eine Monte-Carlo-Schätzung durchgeführt, bei der ich beide Modelle 500 Mal durchlaufen habe, wobei die Stichprobe jedes Mal zufällig in 60% Training und 40% Test aufgeteilt und der Fehler der Vorhersage auf dem Testsatz berechnet wurde.

Der reguläre SVC-Schätzer erzeugte das folgende Fehlerhistogramm: SVC-Fehlerrate Während der lineare SVC-Schätzer das folgende Histogramm erzeugte: Lineare SVC-Fehlerrate

Was könnte für einen so starken Unterschied verantwortlich sein? Warum hat das lineare Modell die meiste Zeit eine so hohe Genauigkeit?

Und was könnte in diesem Zusammenhang die starke Polarisierung der Ergebnisse verursachen? Entweder eine Genauigkeit nahe 1 oder eine Genauigkeit nahe 0, nichts dazwischen.

Zum Vergleich ergab eine Entscheidungsbaumklassifizierung eine viel normalverteilte Fehlerrate mit einer Genauigkeit von etwa 0,85.


Ich gehe davon aus, dass die Scikit-Learn-Dokumentation den Unterschied nicht hervorhebt. Hast du überprüft?
Rohit

1. Welchen Kernel haben Sie in SVC verwendet? Standardeinstellungen = "rbf"? 2. Eins-gegen-eins und eins-gegen-alle sind unterschiedliche Ansätze
kpb

Die Dokumentation ist in Bezug auf das Thema etwas spärlich / vage. Es erwähnt den Unterschied zwischen eins gegen eins und eins gegen Ruhe und dass die lineare SVSSimilar to SVC with parameter kernel=’linear’, but implemented in terms of liblinear rather than libsvm, so it has more flexibility in the choice of penalties and loss functions and should scale better (to large numbers of samples).
Metjush

Für reguläres SVC habe ich den Standardkernel verwendet. Ich weiß, dass 1v1 und 1vR unterschiedliche Ansätze sind, aber ich denke, das ist es, was ich wissen möchte - warum führen sie zu so unterschiedlichen Ergebnissen? Ist es die Wahl des Kernels oder der andere Ansatz zur Klassifizierung mehrerer Kategorien?
Metjush

Antworten:


23

Eine reguläre SVM mit Standardwerten verwendet eine radiale Basisfunktion als SVM-Kernel. Dies ist im Grunde ein Gaußscher Kernel, auch bekannt als Glockenkurve. Dies bedeutet, dass das Niemandsland zwischen verschiedenen Klassen mit einer Gaußschen Funktion erstellt wird. Die lineare SVM verwendet einen linearen Kernel für die Basisfunktion, so dass Sie sich dies als eine ^ geformte Funktion vorstellen können. Es ist viel weniger einstellbar und ist im Grunde nur eine lineare Interpolation.

Die Leute beschäftigen sich mit dieser Frage, weil Sie nicht viele Informationen geliefert haben, sondern sich eingehend mit dem befasst haben, was Sie gepostet haben. Dies trifft auf einige grundlegende Aspekte, um die Details von Voreingenommenheit und Varianz und den Unterschied zwischen linear und nichtlinear wirklich zu verstehen Basisfunktionen in SVM.

Schauen Sie sich dieses Bild an, in dem die vier Regionen mit hoher und niedriger Vorspannung sowie hoher und niedriger Varianz beschrieben werden. Offensichtlich ist der beste Ort, um zu sein, geringe Varianz und geringe Vorspannung.

Darts Bias-Varianz-Bild

Lassen Sie uns zuerst die Varianz beurteilen -

Schauen Sie sich jetzt Ihre Grundstücke an: Bildbeschreibung hier eingeben

Die nichtlineare Basisfunktion weist eine höhere Varianz auf. Sehen Sie, wie es lauter ist als der lineare Kernel! Der lineare Kern hat eine geringere Varianz. Sehen Sie, wie es weniger laut ist!

Lassen Sie uns nun die Voreingenommenheit beurteilen -

Welcher Kernel ist genauer? Wir können die von Ihnen angegebenen Fehler hinzufügen. Der nichtlineare Kernel weist einen Gesamtfehler von ~ 550 + 325 = ~ 875 auf. Der lineare Kernel hat einen Fehler von ~ 690 + ~ 50 = ~ 740. Der lineare Kernel scheint also insgesamt besser zu sein, aber insgesamt sind sie ziemlich eng. Hier wird es schwierig!

Alles zusammen

Sehen Sie, wie der lineare Kernel bei Einsen schlechte und bei Nullen wirklich gute Arbeit geleistet hat. Das ist ziemlich unausgeglichen. Wo wie der nichtlineare Kernel ausgeglichener ist. Es sieht so aus, als ob der Sweet Spot darin bestehen könnte, ein ausgeglichenes Modell zu erstellen, das keine so hohe Varianz aufweist. Wie kontrollieren wir die hohe Varianz? Bingo - Regularisierung. Wir können dem nichtlinearen Modell eine Regularisierung hinzufügen, und wir werden wahrscheinlich viel bessere Ergebnisse sehen. Dies ist der C-Parameter in Scikit Learn-SVMs, den Sie gegenüber dem Standard erhöhen möchten. Wir könnten auch mit dem Gamma-Parameter spielen. Gamma regelt die Breite des Gaußschen. Versuchen Sie, diesen Wert etwas zu erhöhen, um weniger laute Ergebnisse zu erzielen, z. B. ein größeres Niemandsland zwischen den Klassen.

Hoffe das hilft!


Der C-Parameter muss gegenüber dem Standardwert verringert und nicht erhöht werden.
Hamdi

4

Wenn Sie den Standardkernel in SVC (), den Radial Basis Function (rbf) -Kernel, verwendet haben, haben Sie wahrscheinlich eine nichtlineare Entscheidungsgrenze kennengelernt. Im Fall des Ziffern-Datasets wird dies eine lineare Entscheidungsgrenze für diese Aufgabe bei weitem übertreffen (siehe 3.1 'Grundlinien-Linearklassifikator').

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.