Helfen Sie mir, Support Vector Machines zu verstehen

76

Ich verstehe die Grundlagen des Ziels von Support Vector Machines in Bezug auf die Klassifizierung einer Eingabe in mehrere verschiedene Klassen, aber was ich nicht verstehe, sind einige der wichtigsten Details. Für den Anfang bin ich ein bisschen durch die Verwendung von Slack-Variablen verwirrt. Was ist ihr Zweck?

Ich mache ein Klassifizierungsproblem, bei dem ich Druckwerte von Sensoren erfasst habe, die ich auf der Innensohle eines Schuhs platziert habe. Ein Proband wird einige Minuten lang sitzen, stehen und gehen, während die Druckdaten aufgezeichnet werden. Ich möchte einen Klassifikator trainieren, um festzustellen, ob eine Person sitzt, steht oder geht, und dies für zukünftige Testdaten tun zu können. Welchen Klassifizierertyp muss ich ausprobieren? Was ist der beste Weg für mich, einen Klassifikator anhand der von mir erfassten Daten zu trainieren? Ich habe 1000 Einträge zum Sitzen, Stehen und Gehen (3x1000 = 3000 insgesamt), und alle haben die folgende Merkmalsvektorform. (Drucksensor1, Drucksensor2, Drucksensor3, Drucksensor4)

Rohanbk
quelle

Antworten:

103

Ich denke, Sie versuchen, von einem schlechten Ende aus zu beginnen. Was man über SVM wissen sollte, um es zu verwenden, ist nur, dass dieser Algorithmus eine Hyperebene im Hyperraum von Attributen findet, die zwei Klassen am besten trennt, wobei am besten mit dem größten Abstand zwischen den Klassen gemeint ist (das Wissen, wie es gemacht wird, ist hier Ihr Feind, weil es verwischt das Gesamtbild), wie ein berühmtes Bild wie dieses zeigt: Alt-Text

Nun gibt es noch einige Probleme.
Was ist zuallererst mit diesen fiesen Ausreißern, die schamlos in einem Punktewolkenzentrum einer anderen Klasse liegen?
Alt-Text
Zu diesem Zweck erlauben wir dem Optimierer, bestimmte Proben falsch zu kennzeichnen und dennoch jedes dieser Beispiele zu bestrafen. Um eine Mehrzieloptimierung zu vermeiden, werden Strafen für falsch etikettierte Fälle unter Verwendung des zusätzlichen Parameters C, der das Gleichgewicht zwischen diesen Zielen steuert, mit der Margengröße zusammengeführt.
Als nächstes ist das Problem manchmal nicht linear und es kann keine gute Hyperebene gefunden werden. Hier führen wir den Kernel-Trick ein - wir projizieren nur den ursprünglichen, nichtlinearen Raum in einen höherdimensionalen Raum mit einer nichtlinearen Transformation, die natürlich durch eine Reihe zusätzlicher Parameter definiert wird, in der Hoffnung, dass das Problem in dem resultierenden Raum für eine Ebene geeignet ist SVM:

Alt-Text

Noch einmal, mit ein wenig Mathematik können wir sehen, dass dieser ganze Transformationsprozess elegant verborgen werden kann, indem die Zielfunktion modifiziert wird, indem das Skalarprodukt von Objekten durch die sogenannte Kernfunktion ersetzt wird.
Schließlich funktioniert dies alles für 2 Klassen, und Sie haben 3; was soll man damit machen? Hier erstellen wir 3 2-Klassen-Klassifikatoren (Sitzen - kein Sitzen, Stehen - kein Stehen, Gehen - kein Gehen) und kombinieren diese in der Klassifikation mit der Abstimmung.

Okay, das Problem scheint gelöst zu sein, aber wir müssen den Kernel auswählen (hier konsultieren wir unsere Intuition und wählen RBF) und mindestens einige Parameter anpassen (C + Kernel). Und wir müssen dafür eine überpassungssichere Zielfunktion haben, zum Beispiel eine Fehlerannäherung durch Kreuzvalidierung. Also lassen wir den Computer daran arbeiten, gehen einen Kaffee trinken, kommen zurück und sehen, dass es einige optimale Parameter gibt. Toll! Jetzt fangen wir einfach mit der verschachtelten Kreuzvalidierung an, um Fehlerannäherung und Voila zu erhalten.

Dieser kurze Arbeitsablauf ist natürlich zu vereinfacht, um vollständig korrekt zu sein, zeigt jedoch Gründe, warum ich denke, dass Sie zuerst eine zufällige Gesamtstruktur ausprobieren sollten , die nahezu parameterunabhängig ist, von Haus aus mehrere Klassen umfasst, eine unvoreingenommene Fehlerschätzung liefert und nahezu ebenso gut angepasste SVMs ausführt .


quelle
5
(+1) Schön, dass du ein paar Bilder hinzufügst, um das Ganze zu veranschaulichen!
chl
3
@mbq Da Sie in SVM sehr kompetent zu sein scheinen, möchte ich Sie bitten, meine Zweifel zu klären: Wenn wir die beste trennende Hyperebene gefunden haben, wofür verwenden wir sie? Wir können SVM als eine Methode definieren, die zum einen die beste Hyperebene zur korrekten Klassifizierung von Datenpunkten auswählt und zum anderen diese Hyperebene zum Trennen neuer Datenpunkte in den beiden Klassen verwendet. Richtig? (Ich habe einige Zweifel im zweiten Teil)
DavideChicco.it
3
@ DavideChicco.it Grundsätzlich besteht das Hauptproblem der gesamten ML darin, ein Modell zu erstellen, das zuverlässig neue Daten vorhersagt, also ja.