Wählen Sie viele kategoriale Funktionen: Alternativen zur One-Hot-Codierung?

Nov 21 2020

Ich erstelle ein Modell, um den Lebenszeitwert eines Kunden basierend auf den relationalen Daten, die wir über ihn haben, vorherzusagen. Die Benutzertabelle enthält eine Reihe von Eins-zu-Viele-untergeordneten Tabellen, die möglicherweise prädiktiv sind. Die stark vereinfachten Funktionen des Kindes beschränken sich auf Dinge wie:

  • Eine Liste der Artikelkategorien, die sie in der Vergangenheit gekauft haben
  • Eine Liste der vorherrschenden Farben in Anzeigen, auf die sie geklickt haben
  • usw. usw.

In jedem Fall umfasst das offensichtliche Merkmal eine Liste von ~ 0-10 Auswahlmöglichkeiten aus einer kategorialen Variablen. Ich habe mehrere dieser Funktionen, von denen einige bis zu ~ 10k diskrete Werte haben, so dass eine One-Hot-Codierung sehr breit und sehr schnell werden würde.

Nebenbei: Wenn es einen Kunstbegriff für diese Art von "List-of-Tags-Funktion" gibt, die ich als "viele Kategorien auswählen" bezeichne, sagen Sie es mir bitte.

Frage: Gibt es ein dichtes Codierungsschema, das mit ausgewählten kategorialen Funktionen funktioniert?

Antworten

4 noe Nov 22 2020 at 01:19

Wenn Ihr Algorithmus auf der Optimierung des Gradientenabfalls basiert, können Sie Einbettungen verwenden, bei denen es sich um dichte Darstellungsräume für diskrete Elemente handelt.

Einbettungen werden von den meisten Deep-Learning-Frameworks wie Pytorch oder Tensorflow unterstützt.

Update: Die Tatsache, dass Sie mehrere diskrete Werte haben möchten, verhindert nicht die Möglichkeit der Verwendung von Einbettungen: Sie können einfach alle Vektoren zu einem einzigen Wert addieren. Der einfachste Ansatz hierfür wäre, eine konstante Länge für die Liste zu haben (gleich der maximalen Anzahl von Elementen in allen Listen oder einem vernünftigen Maximalwert) und die nicht benötigten Positionen mit "Auffüllelementen" zu füllen. Wenn Sie das sequentielle Erscheinungsbild der Elemente berücksichtigen möchten, können Sie anstelle der Addition der Vektoren Faltungsschichten oder ein LSTM auf die eingebetteten Vektoren anwenden.

2 CarlosMougan Nov 22 2020 at 00:37

Es gibt viele Möglichkeiten, kategoriale Features in der Kategorie-Encoder-Bibliothek zu codieren. Viele davon finden Sie hier.

Diejenige, die angesichts Ihrer Daten vielversprechender erscheint, ist die Zielcodierung