Scharnierverlust mit One-vs-All-Klassifikator

9

Ich betrachte derzeit die uneingeschränkte Urform des Ein-gegen-Alles-Klassifikators

ich=1N.ichk=1,kyichN.K.L.(1+wkxich- -wyichxich)

wo

N.ich 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.N.K.
N.F.
X.N.K.×N.F.
y
W.N.K.×N.ich
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 iwkxichwyichxich

Ich versuche dies mit dem Scharnierverlust umzusetzen, von dem ich glaube, dass er in diesem Fall enden wird

max(0,1+wkxich- -wyichxich ).

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 i1+wkxich<wyichxichxich

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 iwkxichwyichxich

Warum gibt es in der obigen Funktion eine 1? Ich würde denken, dass es wenig Auswirkungen haben würde.

brcs
quelle

Antworten:

2

Ihr Beitrag scheint größtenteils korrekt zu sein.

Die Art und Weise, wie lineare Klassifikatoren für mehrere Klassen eingerichtet werden, besteht darin, dass ein Beispiel, , von der Hyperebene klassifiziert wird, die die höchste Punktzahl ergibt: . Es spielt keine Rolle, ob diese Werte positiv oder negativ sind.a r g m a xxeinrGmeinxkwkx

Wenn der Scharnierverlust für ein bestimmtes Beispiel Null ist, bedeutet dies, dass das Beispiel korrekt klassifiziert ist. Um dies zu sehen, ist der Scharnierverlust Null, wenn . Dies ist eine stärkere Bedingung als , was darauf hinweisen würde, dass Beispiel korrekt als klassifiziert wurde .1+wkxich<wyichxichkwkxich<wyichxichkichyich

Die 1 im Scharnierverlust bezieht sich auf den "Rand" des Klassifikators.

Der Scharnierverlust ermutigt die Bewertungen aus der richtigen Klasse, , nicht nur höher zu sein als die Bewertungen aus allen anderen Klassen, , sondern um einen additiven Faktor höher als diese Bewertungen zu sein.wyichxichwkxich

Wir können den Wert 1 für den Rand verwenden, da der Abstand eines Punktes von einer Hyperebene durch die Größe der linearen Gewichte skaliert wird: ist der Abstand von von der Hyperebene mit normaler Vektor . Da die Gewichte für alle Punkte im Dataset gleich sind, ist es nur wichtig, dass der Skalierungsfaktor 1 für alle Datenpunkte gleich ist.w|w|xxw

Es kann auch das Verständnis erleichtern, wenn Sie die Verlustfunktion als parametrisieren . Sie haben derzeit die Verlustfunktionen als Funktion des linearen Randes, und dies ist nicht unbedingt der Fall.L.(x,y;;w)

user1149913
quelle
Willkommen auf der Website. Sie können hier verwenden. Um es richtig zu rendern, wickeln Sie es einfach in einzelne Dollarzeichen für Inline-Mathematik (genau wie in einem Dokument) und doppelte Dollarzeichen für Anzeigemathematik ein. Sehen Sie sich den Versionsverlauf an, wenn Sie weitere Hilfe benötigen. L.EINT.E.X.L.EINT.E.X.
Kardinal
Ich vermute auch, dass Sie beabsichtigt haben, \cdotanstelle von zu verwenden \dot. Wenn ja, nehmen Sie diese Änderungen bitte vor. Prost. :)
Kardinal
0

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).

Jewgeni
quelle