Ich habe kürzlich angefangen zu lernen, mit sklearn
etwas zu arbeiten und bin gerade auf dieses merkwürdige Ergebnis gestoßen.
Ich habe den digits
verfü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 sklearn
für die SVM-Klassifizierung gibt: SVC
und LinearSVC
wobei 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: Während der lineare SVC-Schätzer das folgende Histogramm erzeugte:
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.
quelle
Similar 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).
Antworten:
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.
Lassen Sie uns zuerst die Varianz beurteilen -
Schauen Sie sich jetzt Ihre Grundstücke an:
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!
quelle
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').
quelle