Eine Hot-Coding-Alternative für große kategoriale Werte?


12

Hallo, Datenrahmen mit großen kategorialen Werten über 1600 Kategorien gibt es eine Möglichkeit, Alternativen zu finden, damit ich nicht über 1600 Spalten habe.

Ich fand diesen unten interessanten Link http://amunategui.github.io/feature-hashing/#sourcecode

Aber sie konvertieren zu Klasse / Objekt, was ich nicht will. Ich möchte meine endgültige Ausgabe als Datenrahmen, damit ich mit verschiedenen Modellen für maschinelles Lernen testen kann. Oder kann ich die genetrierte Matrix verwenden, um andere Modelle des maschinellen Lernens als logistische Regression oder XGBoost zu trainieren?

Kann ich das überhaupt implementieren?


Das ist wirklich ein Problem? Angenommen, Sie verwenden eine spärliche Matrixdarstellung, ist die Onehot-Codierung kein wirkliches Problem.
Louis T

@ LouisT Ich habe Millionen von Platten mehr als 500m Platten
vinaykva

Wenn es heiß ist, spielt es keine Rolle, ob eine spärliche Matrix verwendet wird
Louis T,

@ LouisT Komplexität wird zunehmen und Zugzeit wird auch zunehmen und meine Daten werden viel zu spärlich
vinaykva

1
Ihr Beitrag ist vor ungefähr 1 Jahr und vielleicht nicht mehr interessiert, aber falls Sie noch interessiert sind, haben Sie schon von Entity Embedding mit neuronalen Netzen gehört? medium.com/@satnalikamayank12/…
TwinPenguins

Antworten:


10

Eine Möglichkeit besteht darin, seltene Werte 'anderen' zuzuordnen. Dies geschieht üblicherweise beispielsweise bei der Verarbeitung natürlicher Sprache. Die Intuition ist, dass sehr seltene Etiketten nicht viel statistische Aussagekraft haben.

Ich habe auch Leute gesehen, die 1-heiße kategoriale Werte auf niederdimensionale Vektoren abbilden, wobei jeder 1-heiße Vektor als Zeichnung aus einem multivariaten Gaußschen dargestellt wird. Siehe z. B. das Papier Deep Knowledge Tracing, in dem es heißt, dass dieser Ansatz durch die Idee der komprimierten Wahrnehmung motiviert ist:

BARANIUK, R. Compressive Sensing. IEEE Signal Processing Magazine 24, 4 (2007).

Insbesondere ordnen sie jeden Vektor der Länge N einem kürzeren Vektor der Länge log2 (N) zu. Ich habe das nicht selbst gemacht, aber ich denke, es wäre einen Versuch wert.


Ich frage mich, wie man die Entfernung mit einer solchen Codierung berechnet.
Eric2323223

1

Sie können die Daten lesen und zunächst eine Liste aller eindeutigen Werte Ihrer kategorialen Variablen abrufen. Anschließend können Sie ein Hot-Encoder-Objekt (wie den sklearn.preprocessing.CategoricalEncoder) in Ihre Liste eindeutiger Werte einfügen.

Diese Methode kann auch in einem Zugtest-Framework oder beim Lesen Ihrer Daten in Blöcken hilfreich sein. Ich habe ein Python-Modul erstellt, das dies alles selbst erledigt. Sie finden es in diesem GitHub-Repository - dummyPy

Ein kurzes Tutorial dazu - Wie man kategoriale Variablen in Python heiß codiert?


0

Sie können ähnliche Werte in Buckets speichern, sodass Werte (oder Spalten), die das Muster mit dem nächsten Wert (oder einem ähnlichen Muster) enthalten, durch einen Wert (oder eine Spalte) ersetzt werden können und Ihre 1600-Werte daher auf 400 (oder sogar 400) sinken können weniger).

Ex. für Werte wie (wolkenartig - Nimbuswolken, Nieselregen, leichter Regen, Regen, starker Regen können in (leichter Regen, Regen, starker Regen) umgewandelt 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.