Neuronale Netze: One-Hot-Variable überwältigend kontinuierlich?


13

Ich habe Rohdaten mit etwa 20 Spalten (20 Features). Zehn von ihnen sind kontinuierliche Daten und zehn von ihnen sind kategorisch. Einige der kategorialen Daten können bis zu 50 verschiedene Werte haben (US-Bundesstaaten). Nachdem ich die Daten vorverarbeitet habe, werden die 10 fortlaufenden Spalten zu 10 vorbereiteten Spalten, und die 10 kategorialen Werte werden zu 200 One-Hot-codierten Variablen. Ich mache mir Sorgen, dass, wenn ich all diese 200 + 10 = 210 Merkmale in das neuronale Netz stecke, die 200-one-hot-Merkmale (die 10 kategorialen Spalten) die 10-stetigen Merkmale vollständig dominieren.

Vielleicht wäre eine Methode, Spalten zu "gruppieren" oder so. Ist dies ein berechtigtes Anliegen und gibt es eine Standardmethode, um mit diesem Problem umzugehen?

(Ich benutze Keras, obwohl ich nicht denke, dass es wichtig ist.)


Haben Sie überlegt, zwei (oder mehr) sequentielle Modelle zu verwenden und diese dann zusammenzuführen? Jedes Modell verfügt über Eingaben, die besser mit den Daten übereinstimmen (anstatt sie wie eine Wurst zu zerkleinern). Die Ziele sind dieselben, Sie erstellen jedoch zwei Sätze von Trainingsdaten, die während der Anpassung unabhängig voneinander eingegeben werden. Direkt nach dem Zusammenführen wird die endgültige Ausgabeebene erstellt, sodass die endgültige Ebene entscheidet, welches Modell für bestimmte Samples am besten geeignet ist. Von keras.io: keras.io/getting-started/sequential-model-guide
photox

Genau das, wonach ich gesucht habe. Vielen Dank für Ihren Beitrag.
user1367204

Ich habe das ausprobiert und das val_loss des Ensembles (model_1, model_2) war höher als das val_loss von model_1 und höher als das val_loss von model_2.
user1367204

Haben Sie dies tatsächlich versucht und festgestellt, dass dieses Problem tatsächlich auftritt? Welche Tests haben Sie durchgeführt, um diesen Punkt zu überprüfen? was waren die Ergebnisse?
Hugh Perkins

Antworten:


5

Sie können die kategorialen Variablen mit einer anderen Methode als one-hot codieren. In diesem Fall können Binär- oder Hashing-Encoder geeignet sein. Insbesondere das Hashing ist hilfreich, da Sie alle Kategorien in einer einzigen Darstellung pro Merkmalsvektor codieren, sodass keine einzelne die andere dominiert. Sie können auch die Größe der endgültigen Darstellung angeben, um alle kategorialen Variablen in 10 Features zu hacken und am Ende 20 numerische Features (halb durchgehend, halb kategorial) zu erhalten.

Beide sind in https://github.com/scikit-learn-contrib/categorical-encoding implementiert oder lassen sich recht einfach selbst implementieren.


4

Sie können die Einbettung verwenden, um eine große Anzahl von kategorialen Variablen in einen einzelnen Vektor zu transformieren. Dieser komprimierte Vektor ist eine verteilte Darstellung der kategorialen Merkmale. Die kategorialen Eingaben werden in einen relativ kleinen Vektor der Länge N mit N reellen Zahlen umgewandelt, die auf irgendeine Weise N latente Merkmale darstellen, die alle Eingaben beschreiben.

Betrachten Sie die große Anzahl von Wörtern im englischen Wörterbuch. Wenn diese Zahl N ist, könnten wir jedes Wort als einen One-Hot-Coded-Vektor der Länge N darstellen. Word-to-VEC ist jedoch in der Lage, praktisch alle diese Informationen in einem Vektor der Länge zwischen 200 und 300 zu erfassen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.