Neucodieren von kategorialen Variablen in numerische Variablen bei Verwendung von SVM oder Neural Network


19

Um SVM oder Neural Network zu verwenden, müssen kategoriale Variablen in numerische Variablen umgewandelt (kodiert) werden. In diesem Fall werden normalerweise 0-1 Binärwerte verwendet, wobei der k-te kategoriale Wert in (0,0, .. ., 1,0, ... 0) (1 ist auf der k-ten Position). Gibt es andere Methoden, um dies zu tun, insbesondere wenn es eine große Anzahl von kategorialen Werten gibt (z. B. 10000), so dass die 0-1-Darstellung eine große Anzahl zusätzlicher Dimensionen (Eingabeeinheiten) in das neuronale Netz einführt, was nicht ganz erwünscht oder erwartet erscheint ?

Ich frage nach allgemeinen Strategien.


Fragen Sie nach allgemeinen Strategien oder nach einem bestimmten Problem?
Denis Tarasov

Antworten:


11

In NLP, wo Wörter typischerweise als 1-von-k codiert werden, ist in letzter Zeit die Verwendung von Worteinbettungen aufgetaucht. Die Wikipedia-Seite mit ihren Referenzen ist ein guter Anfang.

xichRnichn

Vielleicht können Sie diese Idee auf Ihre Umgebung übertragen.


10

Die Standardmethoden sind: One-Hot-Codierung (die Sie in der Frage erwähnt haben). Wenn es zu viele mögliche Kategorien gibt, Sie jedoch eine 0-1-Codierung benötigen, können Sie einen Hashing-Trick anwenden .

Die andere häufig verwendete Methode ist die Mittelung der Antwort über die Kategorie: siehe Bild aus dem Kommentar bei kaggle .


1

Sie können dummyVarsin R aus dem caretPaket verwenden. Es werden automatisch verschiedene Spalten basierend auf der Anzahl der Ebenen erstellt. Anschließend können Sie es verwenden cbindund an Ihre Originaldaten anhängen. Andere Optionen umfassen model.matrixund sparse.model.matrix.


0

Sie können die Binärkodierung ausprobieren, die kompakter ist und manchmal die One-Hot-Kodierung übertrifft. Sie können beispielsweise eine kategoriale Einbettung in Keras implementieren.


0

k-1

"Entity Embeddings of Categorical Variables" von Cheng Guo, Felix Berkhahn

Wir bilden kategoriale Variablen in einem Funktionsnäherungsproblem in euklidische Räume ab, die die Einbettung von Entitäten der kategorialen Variablen darstellen. Das Mapping wird von einem neuronalen Netzwerk während des standardmäßigen überwachten Trainingsprozesses gelernt. Entity-Einbettung reduziert nicht nur die Speichernutzung und beschleunigt neuronale Netze im Vergleich zur One-Hot-Codierung, sondern enthüllt vor allem die intrinsischen Eigenschaften der kategorialen Variablen, indem sie ähnliche Werte nahe beieinander im Einbettungsraum abbilden. Wir haben es kürzlich bei einem Kaggle-Wettbewerb erfolgreich eingesetzt und konnten mit relativ einfachen Features den dritten Platz erreichen. In diesem Artikel zeigen wir weiter, dass die Einbettung von Entitäten dem neuronalen Netzwerk hilft, die Verallgemeinerung zu verbessern, wenn die Daten dünn sind und Statistiken unbekannt sind. Daher ist es besonders nützlich für Datensätze mit vielen Merkmalen hoher Kardinalität, bei denen andere Methoden zu Überanpassung neigen. Wir zeigen auch, dass die Einbettungen aus dem trainierten neuronalen Netz die Leistung aller getesteten Methoden des maschinellen Lernens erheblich steigern, wenn sie stattdessen als Eingabemerkmale verwendet werden. Da die Einbettung von Entitäten ein Abstandsmaß für kategoriale Variablen definiert, kann es zur Visualisierung kategorialer Daten und zur Datenclusterung verwendet werden.

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.