Codierungsmerkmale wie Monat und Stunde als kategorial oder numerisch?

23

Ist es besser, Features wie Monat und Stunde als Faktor oder numerisch in einem Modell für maschinelles Lernen zu codieren?

Einerseits halte ich die numerische Codierung für sinnvoll, da die Zeit vorwärts geht (auf den fünften Monat folgt der sechste Monat), andererseits halte ich die kategoriale Codierung aufgrund der zyklischen Natur für sinnvoller von Jahren und Tagen (dem 12. Monat folgt der erste).

Gibt es eine allgemeine Lösung oder Konvention dafür?

julianisch
quelle
Das gleiche Problem trat bei der Definition der Variablen für die Tageszeit (1 bis 24) im RF-Modell auf. Wenn ich die Variable als kategorial konvertiere, zeigt die VarImp-Funktion den Wichtigkeitswert für jede Stunde an und sieht sehr unorganisiert aus. Ich frage mich nur, ob es notwendig ist, eine numerische Variable vom Typ 'Stunde des Tages' in eine kategoriale umzuwandeln.
Mahmudur Rahman

Antworten:

19

Haben Sie darüber nachgedacht, die (Sinus-, Cosinus-) Transformation der Tageszeitvariablen hinzuzufügen? Dies stellt sicher, dass beispielsweise die Stunden 0 und 23 nahe beieinander liegen, wodurch die zyklische Natur der Variablen durchscheinen kann.

( Mehr Info )

Pablo O.
quelle
Ich habe ein Problem damit, denn wenn ich es tue: sin (pi * X / 24), wobei X in [0, 23] für 6 Uhr und 18 Uhr die gleiche Bewertung hat wie sin (pi * 6/24) == sin (pi * 18/24). Aber das sind ganz andere Stunden
Eran Moshe
Kann den Zyklus so machen: sin (pi * X / 12). Danke Eran:]
Eran Moshe
@EranMoshe fyi im Beitrag vom obigen Link verwenden sie stattdessen einen Faktor von 2 * pi, also wäre es Sünde (2 * pi * X / 12) - sie begründen dies in den Kommentaren
Tsando
Und seine (2 * pi X / 24), die (pi X / 12) ist:] Wie Sie sehen, habe ich genau das gleiche Problem mit dem Autor von blog.davidkaleko.com/feature-engineering-cyclical-features.html zu kämpfen wurde gekämpft mit. Und in den Kommentaren kann man sehen, dass "Mariel G" ihn genau so korrigiert, wie ich es erkannt habe: pi * X / 12 wird für die Stunde des Tages zirkulieren. Was ich auch lernen möchte, ist, dass Sie die cos- und sin-Komponenten davon nehmen müssen, um einen echten 24-Stunden-Zeitraum zu definieren! (Sie brauchen einen wahren Kreis und nicht nur eine periodische Funktion)
Eran Moshe
@EranMoshe ah ja, wenn du mehr als Stunden machen willst, dann kann es auf piX / 12 reduziert werden, aber wenn du Monate machen willst, dann wäre es 2piX / 12, dh pi / 6. Also im Allgemeinen wäre es 2piX / Periode
Tsando
9

Die Antwort hängt von der Art der Beziehungen ab, die Sie zwischen dem Zeitmerkmal und der Zielvariablen darstellen möchten.

Wenn Sie die Zeit als numerisch codieren, werden dem Modell bestimmte Einschränkungen auferlegt. Bei einem linearen Regressionsmodell ist der Effekt der Zeit nun monoton. Entweder nimmt das Ziel mit der Zeit zu oder ab. Für Entscheidungsbäume werden Zeitwerte, die nahe beieinander liegen, zusammengefasst.

Die Codierungszeit als kategorial gibt dem Modell mehr Flexibilität, aber in einigen Fällen verfügt das Modell möglicherweise nicht über genügend Daten, um gut zu lernen. Eine Technik, die nützlich sein kann, besteht darin, Zeitwerte in einer bestimmten Anzahl von Sätzen zu gruppieren und den Satz als kategoriales Attribut zu verwenden.

Einige Beispielgruppierungen:

  • Je nach Anwendungsfall kann der Monat in Viertel- oder Jahreszeiten eingeteilt werden. ZB: Jan-Mar, Apr-Jun, etc.
  • Für die Tageszeit gruppieren Sie sie in Tageszeit-Eimer: morgens, abends usw.
  • Für Wochentag, Gruppe in Wochentag, Wochenende.

Jedes der oben genannten Attribute kann bei ausreichender Datenmenge auch direkt als kategoriales Attribut verwendet werden. Darüber hinaus können Gruppierungen auch durch Datenanalyse ermittelt werden, um einen domänenwissensbasierten Ansatz zu ergänzen.

Raghu
quelle
4

Ich empfehle die Verwendung von numerischen Merkmalen. Die Verwendung von kategorialen Merkmalen bedeutet im Wesentlichen, dass Sie die Entfernung zwischen zwei Kategorien nicht als relevant betrachten (z. B. ist Kategorie 1 der Kategorie 2 ebenso ähnlich wie der Kategorie 3). Dies ist definitiv nicht der Fall für Stunden oder Monate.

Das Problem, das Sie ansprechen, ist jedoch, dass Sie Stunden und Monate in einer Weise darstellen möchten, in der 12 gleich 11 ist wie 1. Um dies zu erreichen, empfehle ich, mit den in den Kommentaren und in der Verwendung vorgeschlagenen Schritten fortzufahren eine Sinus / Cosinus-Funktion, bevor die Stunden / Monate als numerische Merkmale verwendet werden.

Tanguy Coatalem
quelle
3

Es hängt davon ab, welchen Algorithmus Sie verwenden.

Wenn Sie baumbasierte Algorithmen wie zufällige Gesamtstrukturen verwenden, übergeben Sie einfach diese Frage. Für baumbasierte Algorithmen ist keine kategoriale Codierung erforderlich.

Für andere Algorithmen wie das neuronale Netzwerk empfehle ich, beide Methoden (kontinuierlich und kategorial) zu verwenden. Der Effekt ist in verschiedenen Situationen unterschiedlich.

Eisklinge
quelle
Dies hängt von der baumbasierten Implementierung ab. Weit verbreitete Pakete wie scikit-learn und xgboost erkennen keine kategorialen Variablen. Es wird von Ihnen eine einmalige Kodierung erwartet.
Ricardo Cruz
Aus diesem Beitrag: towardsdatascience.com/… Sie sollten kein Hot für irgendetwas verwenden, das auf Entscheidungsbäumen basiert. Dies ist ziemlich genau das, was ich auf die harte Tour herausfinde.
Ashley
1

Da alle Daten, die Sie haben, gut definiert sind, würde ich Ihnen eine kategoriale Kodierung vorschlagen, die auch einfacher anzuwenden ist.

simonepi
quelle
1

Umformulieren der Antwort von @raghu . Ein wesentlicher Unterschied zwischen kategorialen und numerischen Merkmalen besteht darin, ob die Größenordnung der Zahlen vergleichbar ist, dh 2019 größer als 2018 oder Dezember (12) größer als März (3)? Nicht wirklich. Obwohl diese Zahlen eine sequentielle Reihenfolge haben, ist ihre Größe nicht vergleichbar. Daher kann die Umwandlung in einen kategorialen Wert sinnvoller sein.

CathyQian
quelle