Wie richte ich ein neuronales Netzwerk für die Ausgabe von Ordnungsdaten ein?

20

Ich habe ein neuronales Netzwerk eingerichtet, um etwas vorherzusagen, bei dem die Ausgabevariable ordinal ist. Ich werde im Folgenden drei mögliche Ausgänge A <B <C beschreiben.

Es ist ziemlich offensichtlich, wie ein neuronales Netzwerk zur Ausgabe kategorialer Daten verwendet wird: Die Ausgabe ist nur ein Softmax der letzten (normalerweise vollständig verbundenen) Schicht, eine pro Kategorie, und die vorhergesagte Kategorie ist die mit dem größten Ausgabewert (dies ist die Standardeinstellung in vielen gängigen Modellen). Ich habe das gleiche Setup für Ordnungswerte verwendet. In diesem Fall sind die Ausgaben jedoch oftmals nicht sinnvoll. Beispielsweise sind die Netzwerkausgaben für A und C hoch, aber B ist niedrig: Dies ist für Ordnungswerte nicht plausibel.

Ich habe eine Idee dafür, nämlich den Verlust zu berechnen, indem die Ausgaben mit 1 0 0 für A, 1 1 0 für B und 1 1 1 für C verglichen werden. Die genauen Schwellenwerte können später mit einem anderen Klassifikator (z. B. Bayesian) eingestellt werden ), aber dies scheint die Grundidee einer Reihenfolge der Eingaben zu erfassen, ohne eine bestimmte Intervallskala vorzuschreiben.

Was ist die Standardmethode zur Lösung dieses Problems? Gibt es Forschungsergebnisse oder Referenzen, die die Vor- und Nachteile verschiedener Ansätze beschreiben?

Alex ich
quelle
1
Ich habe bei Google viele interessante Hits für "ordinal logistic regression" bekommen, zB diesen Paper
Shadowtalker
@ssdecontrol: Interessant. Ich versuchte es; Die Ergebnisse waren besser als bei der Auswahl der Ausgabe mit dem höchsten Wert, jedoch etwas schlechter als bei anderen Methoden (naives Bayes-Verfahren usw.). Dies ist nützlich, hilft aber nicht beim Trainieren des Netzwerks, verbessert die Ergebnisse nur geringfügig nachträglich ... oder zumindest verstehe ich nicht, wie es beim Trainieren des Netzwerks helfen kann.
Alex I
welches "es" hast du probiert? Mein einziger Punkt ist, dass die Suchmaschine hilfreicher sein könnte, als Sie vielleicht erwarten
shadowtalker
Ich bin mir auch nicht sicher, ob ich verstehe, was Sie unter "zum Beispiel sind die Netzwerkausgänge für A und C hoch, aber B ist niedrig: das ist nicht plausibel" verstehen. Sie meinen, Sie sagen viele As und Cs voraus, aber nur wenige Bs? Ich verstehe nicht, warum dies unplausibel sein sollte, es sei denn, Sie haben einen sachlichen oder domänenspezifischen Grund, dies zu glauben
shadowtalker
Ich weiß auch nicht, wie Sie jemals eine Ausgabe wie "1 1 0" haben könnten. Ich denke, hier gibt es einige Verwirrung in Bezug auf die Terminologie. Beschreiben Sie kumulative ordinale Ergebnisse? Wie in einem kumulativen Logit-Modell?
Shadowtalker

Antworten:

15

Ich glaube, die meisten Leute behandeln die ordinale Klassifikation einfach als generische Klassifikation mit mehreren Klassen. Wenn sie also Klassen haben, haben sie Ausgänge und verwenden einfach eine Sigmoid-Aktivierungsfunktion (nicht offensichtlich Softmax) und binäre Kreuzentropie als Verlust.KK

Einige Leute haben es jedoch geschafft, eine clevere Kodierung für Ihre Ordinalklassen zu erfinden (siehe diese Stackoverflow-Antwort ). Es ist eine Art One-Hot-Codierung,

  • Klasse 1 wird dargestellt als [0 0 0 0 ...]

  • Klasse 2 wird dargestellt als [1 0 0 0 ...]

  • Klasse 3 wird dargestellt als [1 1 0 0 ...]

dh jedes Neuron sagt die Wahrscheinlichkeit voraus . Sie müssen immer noch ein Sigmoid als Aktivierungsfunktion verwenden, aber ich denke, dies hilft dem Netzwerk, eine gewisse Kontinuität zwischen den Klassen zu verstehen, ich weiß es nicht. Anschließend führen Sie eine Nachbearbeitung ( ) durch, um die Binärausgabe in Ihre Klassen zu konvertieren.P(y^<k)np.sum

Diese Strategie ähnelt dem Ensemble von Frank und Hall , und ich denke, dies ist die erste Veröffentlichung von solchen.

Ricardo Cruz
quelle
Dieser Ansatz scheint viel ansprechender. Es ist wichtig zu wissen, dass es keine gute Idee ist, vorhergesagte Modi zu verwenden, um daraus ein Klassifizierungsproblem zu machen. Vorhergesagte kumulative Wahrscheinlichkeiten können in vorhergesagte individuelle Wahrscheinlichkeiten umgewandelt werden, und so kann die Dienstprogrammfunktion zum Treffen einer endgültigen Entscheidung viel später eingefügt werden, wenn Dienstprogramme bekannt sind. Siehe fharrell.com/post/classification .
Frank Harrell
1
@ RicardoCruz - Hmm, das klingt sehr nach dem, was ich vorgeschlagen hatte: "1 0 0 für A, 1 1 0 für B und 1 1 1 für C". Gut zu wissen, dass das funktioniert! Auch wow, das war eine Zeitung aus dem Jahr 2007, diese Idee gibt es schon lange
Alex I
Ja, ich war selbst überrascht, als ich das Papier gefunden habe!
Ricardo Cruz
Hinweis: Wie in "Ein Neurel-Netzwerk-Ansatz zur ordinalen Regression" angegeben: "... die Verwendung unabhängiger Sigmoid-Funktionen für Ausgabeknoten garantiert nicht die monotone Beziehung (o1> = o2> = ....> = oK), die ist nicht notwendig, aber wünschenswert für Vorhersagen. " Daher ist es nicht die beste Methode, nur eine "np.sum" zur Vorhersagezeit durchzuführen.
sccrthlt
1
Bearbeiten Sie zu meinem Kommentar oben: Das Durchführen von "np.sum" an den Ausgängen des neuronalen Netzwerks ist irreführend. Die folgende Situation kann auftreten, wenn der Ausgabevektor [0 1 0 1 0] ist. Das Durchführen einer Summation auf diesem Vektor würde eine Klassenvorhersage von 2 ergeben, wenn tatsächlich das neuronale Netzwerk unsicher ist.
sccrthlt