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)
quelle
Antworten:
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:
Nun gibt es noch einige Probleme.
Was ist zuallererst mit diesen fiesen Ausreißern, die schamlos in einem Punktewolkenzentrum einer anderen Klasse liegen?
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:
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