Ich verwende derzeit eine SVM mit einem linearen Kernel, um meine Daten zu klassifizieren. Es liegt kein Fehler im Trainingssatz vor. Ich habe verschiedene Werte für den Parameter ausprobiert ( ). Dies hat den Fehler im Test-Set nicht verändert.10 - 5 , … , 10 2
Jetzt frage ich mich: ist dies ein Fehler durch die Ruby - Bindungen verursacht für libsvm
Ich verwende ( rb-LIBSVM ) oder ist dies theoretisch erklärbar ?
Sollte der Parameter immer die Leistung des Klassifikators ändern?
machine-learning
svm
libsvm
alfa
quelle
quelle
Antworten:
Der C-Parameter teilt der SVM-Optimierung mit, wie sehr Sie eine Fehlklassifizierung der einzelnen Trainingsbeispiele vermeiden möchten. Für große Werte von C wählt die Optimierung eine Hyperebene mit kleinerem Rand, wenn diese Hyperebene besser dazu beiträgt, alle Trainingspunkte korrekt zu klassifizieren. Umgekehrt führt ein sehr kleiner Wert von C dazu, dass der Optimierer nach einer Hyperebene mit größerem Rand sucht, auch wenn diese Hyperebene mehr Punkte falsch klassifiziert. Für sehr kleine Werte von C sollten Sie falsch klassifizierte Beispiele erhalten, selbst wenn Ihre Trainingsdaten linear trennbar sind.
quelle
In einer SVM suchen Sie nach zwei Dingen: einer Hyperebene mit dem größten minimalen Rand und einer Hyperebene, die so viele Instanzen wie möglich korrekt trennt. Das Problem ist, dass Sie nicht immer beides bekommen können. Der Parameter c bestimmt, wie groß Ihr Wunsch nach letzterem ist. Ich habe ein kleines Beispiel unten gezeichnet, um dies zu veranschaulichen. Links haben Sie ein niedriges c, was Ihnen einen ziemlich großen Mindestrand (lila) gibt. Dies setzt jedoch voraus, dass wir den blauen Kreisausreißer, den wir nicht richtig klassifiziert haben, vernachlässigen. Rechts hast du ein Hoch c. Jetzt werden Sie den Ausreißer nicht vernachlässigen und haben einen viel kleineren Spielraum.
Welche dieser Klassifikatoren sind also die besten? Das hängt davon ab, wie die zukünftigen Daten aussehen, die Sie vorhersagen werden, und meistens wissen Sie das natürlich nicht. Wenn die zukünftigen Daten so aussehen:
dann ist der mit einem großen c-Wert erlernte Klassifikator am besten.
Auf der anderen Seite, wenn die zukünftigen Daten so aussehen:
dann ist der mit einem niedrigen c-Wert erlernte Klassifikator am besten.
Abhängig von Ihrem Datensatz kann das Ändern von c eine andere Hyperebene erzeugen oder nicht. Wenn es tut , eine andere Hyperebene erzeugen, das bedeutet nicht , dass Ihre Klassifikator verschiedene Klassen , für die speziellen Daten werden Sie es verwendet haben , zu klassifizieren. Weka ist ein gutes Tool zum Visualisieren von Daten und zum Herumspielen mit verschiedenen Einstellungen für eine SVM. Dies kann Ihnen helfen, eine bessere Vorstellung davon zu bekommen, wie Ihre Daten aussehen und warum das Ändern des c-Werts den Klassifizierungsfehler nicht ändert. Im Allgemeinen erleichtern wenige Trainingsinstanzen und viele Attribute die lineare Trennung der Daten. Auch die Tatsache, dass Sie Ihre Trainingsdaten und keine neuen unsichtbaren Daten auswerten, erleichtert die Trennung.
Aus welchen Daten möchten Sie ein Modell lernen? Wie viele Daten? Können wir es sehen?
quelle
C ist im Wesentlichen ein Regularisierungsparameter, der den Kompromiss zwischen dem Erreichen eines geringen Fehlers bei den Trainingsdaten und der Minimierung der Norm der Gewichte steuert. Dies ist analog zum Ridge-Parameter bei der Ridge-Regression (in der Praxis gibt es kaum Unterschiede in Bezug auf Leistung oder Theorie zwischen linearen SVMs und Ridge-Regression, daher verwende ich im Allgemeinen die letztere - oder die Kernel-Ridge-Regression, wenn es mehr Attribute als Beobachtungen gibt).
Die korrekte Abstimmung von C ist ein entscheidender Schritt in der bewährten Praxis bei der Verwendung von SVM, da die strukturelle Risikominimierung (das Hauptprinzip des grundlegenden Ansatzes) über die Abstimmung von C umgesetzt wird. Der Parameter C erzwingt eine Obergrenze für die Norm von weight, was bedeutet, dass es eine verschachtelte Menge von Hypothesenklassen gibt, die durch C indiziert sind. Wenn wir C erhöhen, erhöhen wir die Komplexität der Hypothesenklasse (wenn wir C geringfügig erhöhen, können wir immer noch alle linearen Modelle bilden, die wir vorher konnten und auch einige, die wir nicht konnten, bevor wir die Obergrenze für die zulässige Norm der Gewichte erhöht haben). Neben der Implementierung von SRM über die maximale Margin-Klassifizierung wird dies auch durch die Einschränkung der Komplexität der Hypothesenklasse über das Controlling C implementiert.
Leider ist die Theorie zur Bestimmung, wie C gesetzt werden soll, derzeit nicht sehr gut entwickelt, sodass die meisten Menschen dazu neigen, eine Kreuzvalidierung durchzuführen (wenn sie etwas tun).
quelle
C ist ein Regularisierungsparameter, der den Kompromiss zwischen dem Erreichen eines geringen Trainingsfehlers und einem geringen Testfehler steuert. Dies ist die Fähigkeit, Ihren Klassifikator auf unsichtbare Daten zu verallgemeinern.
Betrachten Sie die Zielfunktion einer linearen SVM: min | w | ^ 2 + C∑ξ. Wenn Ihr C zu groß ist, versucht der Optimierungsalgorithmus, | w | zu reduzieren so viel wie möglich zu einer Hyperebene führen, die versucht, jedes Trainingsbeispiel richtig zu klassifizieren. Andernfalls gehen die Generalisierungseigenschaften des Klassifikators verloren. Wenn andererseits Ihr C zu klein ist, geben Sie Ihrer Zielfunktion eine gewisse Freiheit, um | w | zu erhöhen viel, was zu großen Trainingsfehlern führen wird.
Die folgenden Bilder können Ihnen dabei helfen, dies zu veranschaulichen.
quelle
Die Antworten oben sind ausgezeichnet. Nachdem ich Ihre Fragen sorgfältig gelesen hatte, stellte ich fest, dass es zwei wichtige Fakten gibt, die wir möglicherweise übersehen haben.
Wenn sich die C-Werte innerhalb eines vernünftigen Bereichs ändern, verschiebt sich die optimale Hyperebene unter Berücksichtigung der beiden Tatsachen nur zufällig um einen kleinen Betrag innerhalb des Randes (der durch die Stützvektoren gebildeten Lücke).
Angenommen, der Abstand der Trainingsdaten ist gering und / oder es gibt keine Testdatenpunkte innerhalb des Abstandes. Die Verschiebung der optimalen Hyperebene innerhalb des Abstandes hat keinen Einfluss auf den Klassifizierungsfehler des Testsatzes.
Wenn Sie jedoch C = 0 setzen, ignoriert SVM die Fehler und versucht nur, die Summe der Quadrate der Gewichte (w) zu minimieren. Möglicherweise erhalten Sie unterschiedliche Ergebnisse für den Testsatz.
quelle
Der C-Parameter wird zur Steuerung der Ausreißer verwendet - niedriges C bedeutet, dass wir mehr Ausreißer zulassen, hohes C bedeutet, dass wir weniger Ausreißer zulassen.
quelle
Ein hohes C (Kosten) bedeutet, dass die Kosten einer Fehlklassifizierung erhöht werden. Dies bedeutet, dass ein flexibler Kernel schneller wird, um Fehlklassifizierungen der Beobachtungen im Trainingssatz zu vermeiden.
Wenn der Kernel verzerrt sein soll, lässt sich das Modell bei der Vorhersage neuer Daten nicht gut verallgemeinern.
Wenn der Kernel gerade ist, kann das Modell bei der Vorhersage neuer Daten nicht gut verallgemeinert werden.
quelle