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.

user68589
quelle
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.

bayerj
quelle
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 .

Alleo
quelle
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.

Karan Gulati
quelle
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.

eafpres
quelle
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.

Sycorax sagt Reinstate Monica
quelle