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.
Antworten:
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.
Vielleicht können Sie diese Idee auf Ihre Umgebung übertragen.
quelle
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 .
quelle
Sie können
dummyVars
in R aus demcaret
Paket verwenden. Es werden automatisch verschiedene Spalten basierend auf der Anzahl der Ebenen erstellt. Anschließend können Sie es verwendencbind
und an Ihre Originaldaten anhängen. Andere Optionen umfassenmodel.matrix
undsparse.model.matrix
.quelle
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.
quelle
"Entity Embeddings of Categorical Variables" von Cheng Guo, Felix Berkhahn
quelle