Ich habe mir das kürzlich mit einem Faltungsklassifikator für neuronale Netze angesehen, der mit sechs Ordnungsklassen arbeitet. Ich habe drei verschiedene Methoden ausprobiert:
Methode 1: Unabhängige Standardklassifizierung
Dies ist, was Sie als Basis in der Frage mit der Zuordnung erwähnt haben:
class 0 -> [1, 0, 0, 0, 0, 0]
class 1 -> [0, 1, 0, 0, 0, 0]
class 2 -> [0, 0, 1, 0, 0, 0]
class 3 -> [0, 0, 0, 1, 0, 0]
class 4 -> [0, 0, 0, 0, 1, 0]
class 5 -> [0, 0, 0, 0, 0, 1]
Wir würden normalerweise die Softmax-Aktivierung und damit den kategorialen Crossentropieverlust verwenden.
Dies berücksichtigt jedoch nicht, wie Sie sagen, die Beziehung zwischen den Klassen, so dass die Verlustfunktion nur davon abhängt, ob Sie die richtige Klasse treffen oder nicht, und nicht davon, ob Sie nahe kommen.
Methode 2: Ordinale Zielfunktion
Dies ist ein Ansatz, der von Cheng et al. (2008) , auf die hier und hier auch bei StackExchange Bezug genommen wurde . Das Mapping ist jetzt:
class 0 -> [0, 0, 0, 0, 0]
class 1 -> [1, 0, 0, 0, 0]
class 2 -> [1, 1, 0, 0, 0]
class 3 -> [1, 1, 1, 0, 0]
class 4 -> [1, 1, 1, 1, 0]
class 5 -> [1, 1, 1, 1, 1]
Dies wird mit einer Sigmoidaktivierung und einem binären Crossentropieverlust verwendet. Diese Zielfunktion bedeutet, dass der Verlust umso geringer ist, je näher Sie der richtigen Klasse kommen.
Sie können eine Klasse aus der Ausgabe dieses Klassifikators vorhersagen, indem Sie den ersten Index bei dem . gibt Ihnen dann die vorhergesagte Klasse.{yk}kyk<0.5k
Methode 3: Klassifizierung in Regression verwandeln
Dies ist die gleiche Idee wie Ihre zweite. Das Mapping hier wäre:
class 0 -> [0]
class 1 -> [1]
class 2 -> [2]
class 3 -> [3]
class 4 -> [4]
class 5 -> [5]
Ich habe dabei eine lineare Aktivierung und einen mittleren quadratischen Fehlerverlust verwendet. Wie beim vorherigen Ansatz erhalten Sie auch einen geringeren Verlust, je weniger Sie verpassen.
Wenn Sie eine Klasse basierend auf deren Ausgabe vorhersagen, können Sie die Ausgabe einfach auf die nächste Ganzzahl runden.
Einige Beispielergebnisse
Ich habe die verschiedenen Methoden mit demselben Datensatz bewertet. Die Metriken waren präzise Genauigkeit (Treffen der richtigen Klasse) und benachbarte Genauigkeit (Treffen der richtigen Klasse oder eines ihrer Nachbarn) in klassenunausgeglichenen und klassenausgeglichenen Versionen. Jeder unten gezeigte Metrikwert wird als Durchschnitt von drei Läufen ermittelt.
Für Methode 1 / Methode 2 / Methode 3 ergaben die Metriken:
- Unausgeglichene genaue Genauigkeit: 0,582 / 0,606 / 0,564
- Ausgewogene genaue Genauigkeit: 0,460 / 0,499 / 0,524
- Unausgeglichene Nachbargenauigkeit: 0,827 / 0,835 / 0,855
- Ausgewogene Nachbargenauigkeit: 0,827 / 0,832 / 0,859
Daher ist für meinen speziellen Datensatz und mein Netzwerk-Setup der Regressionsansatz im Allgemeinen am besten und der Standardansatz mit unabhängigen Klassen im Allgemeinen am schlechtesten. Ich weiß nicht, wie gut sich diese Ergebnisse auf andere Fälle übertragen lassen, aber es sollte nicht so schwierig sein, einen Ordnungsklassifikator anzupassen, um alle drei Methoden anwenden zu können, damit Sie selbst testen können.