Ich betrachte derzeit die uneingeschränkte Urform des Ein-gegen-Alles-Klassifikators
wo
ist die Anzahl der Instanzen, ist die Anzahl der Klassen, ist die Anzahl der Merkmale, ist eine Datenmatrix, ist ein Vektor von Klassenbezeichnungen, ist eine Matrix, wobei jede entspricht Zu den Gewichten für die Hyperebene, die eine Klasse vom Rest ist eine beliebige Verlustfunktion.
N F X N K × N F y W N K × N I L.
Nach meinem Verständnis versucht die obige Funktion, für jede Klasse eine Hyperebene zu finden, die den Abstand zwischen den Stichproben innerhalb der zugeordneten Klasse zu allen anderen Stichproben maximiert. Wenn die Hyperebenen korrekt positioniert sind, sollte immer negativ sein, sollte immer positiv sein und unsere Verlustfunktion sollte zurückkehren ziemlich niedrig.w y i ⋅ x i
Ich versuche dies mit dem Scharnierverlust umzusetzen, von dem ich glaube, dass er in diesem Fall enden wird
).
In den oben genannten Fällen konnten wir jedoch nicht zu einer Situation führen, in der die Hyperebenen alle Stichproben als zu jeder Klasse gehörig klassifizieren. Wenn wir zum Beispiel die Hyperebene betrachten, die Klasse 1 von allen anderen Klassen trennt, vorausgesetzt, dass dann ist der entstandene Verlust 0, obwohl als die falsche Klasse klassifiziert wurde.x i
Wo bin ich falsch gelaufen? Oder spielt es keine Rolle, ob negativ oder positiv ist, vorausgesetzt, hat eine höhere Punktzahl? Ich habe das Gefühl, dass meine Verwendung der hier beschriebenen Scharnierfunktion falsch ist, aber meine heutige Verwendung von Google hat nur zu mehr Verwirrung geführt.w y i ⋅ x i
Warum gibt es in der obigen Funktion eine 1? Ich würde denken, dass es wenig Auswirkungen haben würde.
\cdot
anstelle von zu verwenden\dot
. Wenn ja, nehmen Sie diese Änderungen bitte vor. Prost. :)In der Verlustfunktion fehlt das binäre Ergebnis / Label (das für eine bestimmte Klasse den Wert +1 und -1 annehmen kann): max (0, 1 - y * (w * x)) (siehe Details unten).
Insgesamt denke ich, dass die obige Spezifikation (sowohl die Notation als auch die Verlustfunktion) One-vs-All überkompliziert - stattdessen könnte man einfach eine bestimmte Klasse nehmen, + 1 / -1-Ergebnis y sowie die entsprechende Datenmatrix X konstruieren (mit Nf-Spalten und Ni-Zeilen) und Parametervektor w für diese Klasse und schreiben Sie die entsprechende Gelenkverlustfunktion für einen klassischen binären Klassifikator für diese Klasse: sum (max (0, 1 - y * (w * x))) wobei Die Summe bezieht sich auf alle Dateninstanzen. X ist eine Zeile von X, die einer bestimmten Instanz entspricht. Man braucht "1" in der Gelenkverlustfunktion (da y * (w * x)> = 1 der korrekten Modellvorhersage entspricht, was die Verlustfunktion betrifft).
quelle