Codierung kategorialer Merkmale in Zahlen für maschinelles Lernen


14

Viele Algorithmen für maschinelles Lernen, zum Beispiel neuronale Netze, gehen davon aus, dass sie sich mit Zahlen befassen. Wenn Sie also kategoriale Daten haben, müssen Sie diese konvertieren. Mit kategorisch meine ich zum Beispiel:

Automarken: Audi, BMW, Chevrolet ... Benutzer-IDs: 1, 25, 26, 28 ...

Obwohl es sich bei den Benutzer-IDs um Zahlen handelt, handelt es sich nur um Bezeichnungen, und dies bedeutet nichts in Bezug auf Kontinuität wie Alter oder Geldsumme.

Der grundlegende Ansatz scheint also binäre Vektoren zu verwenden, um Kategorien zu codieren:

Audi: 1, 0, 0 ... BMW: 0, 1, 0 ... Chevrolet: 0, 0, 1 ...

Es ist in Ordnung, wenn es nur wenige Kategorien gibt, aber darüber hinaus sieht es ein bisschen ineffizient aus. Wenn Sie beispielsweise 10 000 Benutzer-IDs codieren müssen, sind es 10 000 Funktionen.

Die Frage ist, gibt es einen besseren Weg? Vielleicht eine mit Wahrscheinlichkeiten?


3
Warum sollten Sie eine Benutzer-ID in ein Vorhersagemodell aufnehmen? Bei anderen kategorialen Variablen mit einer Kardinalität, die größer ist als gewünscht, wenn Sie die von Ihnen beschriebene Dummy-Variablencodierung verwenden, werden diese zunächst als einziger Prädiktor durch einen Entscheidungsbaum geführt, um die Ebenen zu reduzieren. Kann auch durch Gruppieren von "seltenen" Ebenen usw. neu bin.
B_Miner

Das hört sich interessant an - wie zufällige Effekte in einem statistischen Modell, bei dem Sie sich für Effekte interessieren, die für eine bestimmte Person spezifisch sind. Ich kann mir Situationen vorstellen, in denen es nützlich wäre, wenn Sie beispielsweise immer wieder dieselben Personen sehen und vorhersagen möchten, was diese bestimmte Person tun wird. Bitte teile mehr über deine Pläne mit, wenn du kannst. Sie können sich auch mit der Mehrebenenmodellierung befassen, obwohl diese traditionell eher in den Inferenzeinstellungen als im maschinellen Lernen verwendet wird.
Anne Z.

Ich erinnere mich an einen ML-Wettbewerb, bei dem einige intelligente Forscher festgestellt haben, dass die Benutzer-IDs in den Daten zum Zeitpunkt der Erstellung des Benutzerkontos angegeben wurden. Daher wurden die Zeitstempel, die verschleiert wurden, aufgedeckt (was die Vorhersage der Reaktion positiv beeinflusst). Abgesehen von solchen Fällen und den von Anne (Empfehlungssysteme) erwähnten würde ich die Benutzer-ID nicht angeben.
Steffen

Anne - Ist ein Zufallseffektmodell nicht tatsächlich NICHT an den Individuen interessiert - sie gelten also als Stichprobe aus einer Population?
B_Miner

Ich verstehe nicht, warum es keinen Sinn macht, ein Merkmal für die Automarke eines bestimmten Benutzers zu haben, wenn das Lernproblem darin besteht, die binäre Kategorie "wohlhabend" / "nicht wohlhabend" vorherzusagen. Benutzer-IDs können verwendet werden, wenn das soziale Netzwerk der Person bekannt ist: um beispielsweise zu demonstrieren, dass Freunde von Benutzer X eher dazu neigen, reich zu sein. Stimmt etwas mit diesem Gedankengang nicht?
Vladtn

Antworten:


6

Sie können Ihre Benutzer-IDs immer als Wortsack behandeln: Die meisten Textklassifizierer können mit Hunderttausenden von Dimensionen umgehen, wenn die Daten dünn sind (viele Nullen, die Sie nicht explizit im Speicher speichern müssen, wenn Sie beispielsweise komprimierte, sparsame Zeilen verwenden) Darstellung für Ihre Datenmatrix).

Die Frage ist jedoch: Ist es sinnvoll, Benutzer-IDs als Features zu behandeln, wenn Sie ein bestimmtes Problem haben? Wäre es nicht sinnvoller, Ihre Beziehungsdaten zu denormalisieren und Benutzermerkmale (Alter, Ort, Zeichen des Online-Spitznamens, Transaktionsverlauf ...) anstelle ihrer IDs zu verwenden?

Sie können auch ein Clustering Ihrer unformatierten Benutzervektoren durchführen und statt der Benutzer-IDs die IDs der N nächstgelegenen Zentren als aktivierte Features für verwenden.


OK, obwohl dies eher eine allgemeine Frage ist, konzentrieren sich die meisten von Ihnen auf das Thema Benutzer-IDs. Deshalb möchte ich sie hier verwenden. Schauen wir uns einen von Kaggles Wettbewerben über Grockit an: kaggle.com/c/WhatDoYouKnow . Das Ziel ist, vorherzusagen, ob ein Benutzer eine Frage richtig beantworten wird. Es ist ein Problem, das meiner Meinung nach mit Empfehlungssystemen vergleichbar ist. Sie erhalten nur Fragen anstelle von Filmen und richtige / falsche anstelle von Bewertungen sowie einige andere Daten. Zeitstempel sind verfügbar :)
Nucular

1
In diesem Fall können Sie davon ausgehen, dass der Benutzer unabhängig ist, und Sie können einen Klassifikator pro Benutzer erstellen, der nur anhand seiner eigenen Historie trainiert wurde.
Ogrisel

1

Gleichseitige Codierung ist wahrscheinlich das, wonach Sie suchen, wenn Sie versuchen, Klassen in ein neuronales Netzwerk zu codieren. Es funktioniert in der Regel besser als die "1 von n" -Codierung, auf die in anderen Posts verwiesen wird. Als Referenz kann ich vorschlagen: http://www.heatonresearch.com/wiki/Equilateral


Dies scheint mit der Codierung von Ausgabewerten zu tun zu haben, nicht mit der kategorialen Codierung von Eingabewerten, nach der das OP fragt.
Alex
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.