Kombinieren von kategorialen und kontinuierlichen Eingabefunktionen für das Training neuronaler Netze

16

Angenommen, wir haben zwei Arten von Eingabefunktionen: kategorial und kontinuierlich. Die kategorialen Daten können als One-Hot-Code A dargestellt werden, während die kontinuierlichen Daten nur ein Vektor B im N-dimensionalen Raum sind. Es scheint, dass die einfache Verwendung von concat (A, B) keine gute Wahl ist, da A, B völlig unterschiedliche Arten von Daten sind. Im Gegensatz zu B gibt es in A beispielsweise keine numerische Reihenfolge. Meine Frage ist also, wie solche zwei Arten von Daten kombiniert werden können, oder gibt es eine herkömmliche Methode, um sie zu verarbeiten.

Tatsächlich schlage ich eine naive Struktur vor, wie sie auf dem Bild dargestellt ist

Geben Sie hier die Bildbeschreibung ein

Wie Sie sehen, werden die ersten Ebenen verwendet, um Daten A auf eine mittlere Ausgabe im kontinuierlichen Raum zu ändern (oder abzubilden), und sie werden dann mit Daten B verknüpft, die ein neues Eingabe-Feature im kontinuierlichen Raum für spätere Ebenen bilden. Ich frage mich, ob es vernünftig ist oder nur ein "Versuch und Irrtum" -Spiel. Vielen Dank.

JunjieChen
quelle

Antworten:

5

Es gibt drei Hauptansätze, um dies zu lösen:

  1. Erstellen Sie zwei Modelle separat und trainieren Sie dann einen Ensemble-Algorithmus , der die Ausgabe der beiden Modelle als Eingabe empfängt
  2. Zusammenfassen aller Daten zu einem einzelnen Vektor / Tensor als Vorverarbeitungsschritt und Trainieren eines einfachen Einzeleingangs NN
  3. Die von Ihnen vorgeschlagene NN-Architektur mit mehreren Eingängen

Der Ensemble-Ansatz ist die einfachste Option und führt zu angemessenen Ergebnissen. Er funktioniert jedoch nicht so gut wie die von Ihnen vorgeschlagene Option, da das Ensemble-Netzwerk nur Klassenwahrscheinlichkeiten von den beiden Netzwerken als Eingabe empfängt und im Vergleich zu Ihrer Ansatz verpassen komplexere Beziehungen zwischen den Datentypen.

Der zweite Ansatz unterscheidet sich theoretisch nicht wesentlich von Ihrem vorgeschlagenen Ansatz, mit dem Unterschied, dass davon ausgegangen wird, dass das Netzwerk selbst herausfindet, dass die Eingabe aus zwei Datentypen besteht (da beide im selben Vektor / Tensor liegen) ). Es wird viel Schulungszeit dauern, bis das Netzwerk dies gelernt hat, und Sie können in einem lokalen Minimum stecken bleiben, bevor dies überhaupt passiert.

Aufgrund meiner persönlichen Erfahrung ist das von Ihnen vorgeschlagene Netzwerk die beste Option, da es wahrscheinlich die kürzeste Zugzeit hat. Sobald Sie die richtige Architektur gefunden haben, ist es sehr einfach, das Netzwerk in der Produktion zu trainieren und zu warten (umzuschulen) Sie müssen immer nur ein einziges Modell neu trainieren.

Tadej Magajna
quelle
0

Ich habe die von Ihnen vorgeschlagene naive Struktur schon seit einiger Zeit verwendet. In einem gut gerahmten Problem und mit genügend Daten funktioniert diese Art von Architektur recht gut. Hier sind jedoch einige Dinge, die ich gelernt habe:

  1. Baumbasierte Algorithmen (RF, XGB) funktionieren im Allgemeinen gut mit gemischten Klassen, es sei denn, Sie haben bestimmte Ausgabeanforderungen oder Verlustfunktionen, die über neuronale Netze einfacher zu implementieren sind.
  2. Wenn die Verwendung eines neuronalen Netzwerks entschieden wird, ist diese Architektur im Vergleich zu anderen Arten der Zeichenfolgencodierung besser.
  3. Dieser Ansatz funktioniert auch mit gemischten Eingabezeitreihendaten - viel besser als alle klassischen Zeitreihenansätze.

Das Schlüsseldesign wäre die Verkettungsschicht und wo möchten Sie sie in die Architektur einfügen? Die Verwendung von Einbettungsebenen bietet Ihnen zusätzliche Vorteile, wenn Sie diese erlernten Einbettungen in einigen anderen Aufgaben / Visualisierungen verwenden.

Diese Art von Architektur wurde in Kaggle-Wettbewerben verwendet [1] und wird auch im Fast.ai-Kurs von Prof. Jeremy Howard [2] unterrichtet.

  1. https://yashuseth.blog/2018/07/22/pytorch-neural-network-for-tabular-data-with-categorical-embeddings/
  2. https://www.fast.ai/2019/01/24/course-v3/
Soumyajit
quelle