Kategorische Daten: Vokabular- und One-Hot-Codierung

Der Begriff Dimension ist ein Synonym für die Anzahl der Elemente in einer Featurevektor: Einige kategoriale Merkmale sind niedrigdimensional. Beispiel:

Name der Funktion Anzahl der Kategorien Beispielkategorien
snowed_today 2 Wahr, falsch
skill_level 3 Anfänger, Profi, Experte
season 4 Winter, Frühling, Sommer, Herbst
day_of_week 7 Montag, Dienstag, Mittwoch
Planet 8 Merkur, Venus, Erde

Wenn ein kategoriales Merkmal nur wenige mögliche Kategorien hat, können Sie codieren Sie es als Vokabular. Mit einer Vokabularcodierung behandelt das Modell alle Möglicher kategorialer Wert als separates Feature. Während der Schulung unterschiedliche Gewichtungen für jede Kategorie lernt.

Angenommen, Sie erstellen ein Modell, um den Preis eines Autos vorherzusagen, die teilweise auf ein kategoriales Feature mit dem Namen car_color angewendet wurden. Vielleicht sind rote Autos mehr wert als grüne Autos. Da die Hersteller nur eine begrenzte Anzahl von Außenfarben anbieten, ist car_color ein niedrigdimensionales kategoriales Merkmal. In der folgenden Abbildung wird ein Vokabular (mögliche Werte) für car_color:

Abbildung 1: Jede Farbe in der Palette wird als
      . Das heißt, jede Farbe ist ein separates Merkmal im Featurevektor.
      Zum Beispiel "Rot". ist ein Element, 'Orange' ist eine separate Funktion.
      und so weiter.
Abbildung 1. Ein einzigartiges Merkmal für jede Kategorie.

Übung: Teste deine Intuition

Richtig oder falsch: Ein ML-Modell kann direkt auf Rohstringwerte wie "Red" und "Black", ohne diese Werte in numerische Vektoren umzuwandeln.
Richtig
Während des Trainings kann ein Modell nur Gleitkommazahlen bearbeiten. Der String "Red" ist keine Gleitkommazahl. Ich muss Strings wie "Red" in Gleitkommazahlen konvertieren.
Falsch
Ein ML-Modell kann nur mit Features trainiert werden, Gleitkommawerte sein, sodass Sie diese Zeichenfolgen in Gleitkommawerte vor dem Training angegeben werden.

Indexnummern

Modelle für maschinelles Lernen können nur Gleitkommazahlen bearbeiten. Daher müssen Sie jeden String wie in die folgende Abbildung:

Abbildung 2. Jeder Farbe ist ein eindeutiger Ganzzahlwert zugeordnet. Für
      Beispiel: „Rot“ der Ganzzahl 0, "Orange", zugeordnet ist. mit dem
      Ganzzahl 1 usw.
Abbildung 2. Indexierte Funktionen.

Teste deine Intuition

Soll Ihr Modell direkt mit den angegebenen Indexnummern trainiert werden? in Abbildung 2?
Ja
Würde das Modell mit den Indexnummern trainiert, fälschlicherweise als numerischen Wert behandelt werden, und überlegen Sie, "Black" (Indexnummer 5) in 5 Mal aussagekräftiger als "Orange" (Indexnummer 1).
Nein
Das Modell sollte nicht mit Indexnummern trainiert werden. Wenn ja, würde Ihr Modell jede Indexnummer als numerisch behandeln und betrachten Sie "Black" (Indexnummer 5) als 5-mal aussagekräftiger als "Orange" (Indexnummer 1).

One-Hot-Codierung

Der nächste Schritt beim Erstellen eines Vokabulars besteht darin, jede Indexnummer in One-Hot-Codierung. In einer One-Hot-Codierung:

  • Jede Kategorie wird durch einen Vektor (Array) von N Elementen dargestellt, wobei N ist die Anzahl der Kategorien. Beispiel: Wenn für car_color acht mögliche Werte vorhanden sind Kategorien enthalten, hat der One-Hot-Vektor, der diese darstellt, acht Elemente.
  • Genau eines der Elemente in einem One-Hot-Vektor hat den Wert 1,0; haben alle übrigen Elemente den Wert 0,0.

Die folgende Tabelle zeigt beispielsweise die One-Hot-Codierung für jede in car_color:

Funktion Rot Orange Blau Gelb Grün Schwarz Lila Braun
„Rot“ 1 0 0 0 0 0 0 0
„Orange“ 0 1 0 0 0 0 0 0
„Blau“ 0 0 1 0 0 0 0 0
„Gelb“ 0 0 0 1 0 0 0 0
„Grün“ 0 0 0 0 1 0 0 0
„Schwarz“ 0 0 0 0 0 1 0 0
"Lila" 0 0 0 0 0 0 1 0
„Braun“ 0 0 0 0 0 0 0 1

Es ist der One-Hot-Vektor, nicht der String oder die Indexnummer, der übergeben wird. zum Featurevektor hinzu. Das Modell lernt eine eigene Gewichtung für jedes Element Featurevektor verwenden.

In der folgenden Abbildung sind die verschiedenen Transformationen in der Vokabulardarstellung:

Abbildung 3: Diagramm des gesamten Prozesses für die Zuordnung von Kategorien zu
      Featurevektoren. Im Diagramm sind die Eingabemerkmale gelb,
      „Orange“, „Blau“ und „Blau“ ein zweites Mal.  Das System verwendet ein gespeichertes
      Vokabular ('Rot' ist 0, 'Orange' ist 1, 'Blau' ist 2, 'Gelb' ist 3 und
      usw.), um den Eingabewert einer ID zuzuordnen. Das System ordnet also „Gelb“,
      „Orange“, „Blau“ und „Blau“ 3, 1, 2, 2. Das System wandelt die
      diese Werte in einen One-Hot-Featurevektor. Wenn z. B. ein System
      mit acht möglichen Farben wird 3 zu 0, 0, 0, 1, 0, 0, 0, 0. <ph type="x-smartling-placeholder">
</ph> Abbildung 3: Der End-to-End-Prozess zum Zuordnen von Kategorien zu Featurevektoren.

Dünnbesetzte Darstellung

Ein Feature, dessen Werte überwiegend null (oder leer) sind, wird als ein dünn besetztes Feature. Viele Kategoriale Features wie car_color sind in der Regel dünnbesetzte Features. Sparse-Darstellung bedeutet das Speichern der position von 1,0 in einem dünnbesetzten Vektor. Der One-Hot-Vektor für "Blue" ist beispielsweise:

[0, 0, 1, 0, 0, 0, 0, 0]

Da sich 1 an Position 2 befindet (beim Start der Zählung mit 0), gilt Folgendes: dünnbesetzte Darstellung für den vorherigen One-Hot-Vektor ist:

2

Beachten Sie, dass die dünnbesetzte Darstellung viel weniger Arbeitsspeicher verbraucht als die One-Hot-Vektor mit acht Elementen. Wichtig ist, dass das Modell auf dem Training und nicht die dünnbesetzte Darstellung.

Ausreißer in kategorialen Daten

Wie numerische Daten enthalten auch kategorische Daten Ausreißer. Angenommen, car_color enthält nicht nur die beliebten Farben, sondern auch einige selten verwendete Ausreißerfarben, z. B. "Mauve" oder "Avocado". Anstatt jede dieser Ausreißerfarben einer separaten Kategorie zuzuordnen, sie zu einem einzigen „Catch-All“ zusammenfassen, Kategorie namens nicht im Vokabular (Aus dem Off). Mit anderen Worten, alle Ausreißerfarben werden in einer einzigen Ausreißer-Bucket. Das System lernt eine einzelne Gewichtung für diesen Ausreißer-Bucket.

Hochdimensionale kategoriale Merkmale codieren

Einige kategoriale Merkmale haben eine hohe Anzahl von Dimensionen, z. B. in der folgenden Tabelle:

Name der Funktion Anzahl der Kategorien Beispielkategorien
words_in_english ~ 500.000 "glücklich", "gehend"
US_postal_codes ~ 42.000 „02114“, „90301“
last_names_in_Germany ~850.000 „Schmidt“, „Schneider“

Bei einer hohen Anzahl von Kategorien ist die One-Hot-Codierung in der Regel keine gute Wahl. Einbettungen, die in einem separaten Modul für Einbettungen, werden in der Regel eine viel bessere Entscheidung. Durch Einbettungen wird die Anzahl der Dimensionen, die Modelle in zweierlei Hinsicht nutzen:

  • Das Modell wird in der Regel schneller trainiert.
  • Das integrierte Modell leitet Vorhersagen normalerweise schneller ab. Das heißt, der Parameter Modell eine niedrigere Latenz hat.

Hash-Technologie (auch als Hash-Technologie bezeichnet) ) ist eine weniger gebräuchliche Methode, um die Anzahl der Dimensionen zu reduzieren.