Der Begriff Dimension ist ein Synonym für die Anzahl der Elemente in einem Merkmalsvektor. Einige kategorische Merkmale sind niedrigdimensional. Beispiel:
Name der Funktion | Anzahl der Kategorien | Beispielkategorien |
---|---|---|
snowed_today | 2 | Wahr, Falsch |
skill_level | 3 | Anfänger, Praktiker, Experte |
season | 4 | Winter, Frühling, Sommer, Herbst |
day_of_week | 7 | Montag, Dienstag, Mittwoch |
Planet | 8 | Merkur, Venus, Erde |
Wenn ein kategorisches Merkmal nur wenige mögliche Kategorien hat, können Sie es als Vokabular codieren. Bei einer Vokabularcodierung behandelt das Modell jeden möglichen kategorischen Wert als separates Merkmal. Während des Trainings lernt das Modell unterschiedliche Gewichtungen für jede Kategorie.
Angenommen, Sie erstellen ein Modell, um den Preis eines Autos vorherzusagen, der unter anderem auf einem kategorischen Feature namens car_color
basiert.
Vielleicht sind rote Autos mehr wert als grüne.
Da Hersteller eine begrenzte Anzahl von Außenfarben anbieten, ist car_color
ein niedrigdimensionales kategoriales Feature.
Die folgende Abbildung zeigt ein Vokabular (mögliche Werte) für car_color
:
Übung: Teste deine Intuition
"Red"
ist keine Gleitkommazahl. Sie müssen Strings wie "Red"
in Gleitkommazahlen konvertieren.
Indexzahlen
Modelle für maschinelles Lernen können nur Gleitkommazahlen verarbeiten. Daher müssen Sie jeden String in eine eindeutige Indexnummer umwandeln, wie in der folgenden Abbildung dargestellt:
Übung: Teste deine Intuition
"Black"
(Indexnummer 5) als fünfmal aussagekräftiger für das Modell betrachten als "Orange"
(Indexnummer 1).
"Black"
(Indexnummer 5) als fünfmal aussagekräftiger für das Modell betrachten als "Orange"
(Indexnummer 1).
One-Hot-Codierung
Im nächsten Schritt beim Erstellen eines Vokabulars werden die einzelnen Indexnummern in ihre One-Hot-Codierung umgewandelt. Bei der One-Hot-Codierung:
- Jede Kategorie wird durch einen Vektor (Array) mit N Elementen dargestellt, wobei N die Anzahl der Kategorien ist. Wenn
car_color
beispielsweise acht mögliche Kategorien hat, hat der One-Hot-Vektor, der sie darstellt, acht Elemente. - Genau ein Element in einem One-Hot-Vektor hat den Wert 1,0. Alle anderen Elemente haben den Wert 0,0.
In der folgenden Tabelle sehen Sie beispielsweise die One-Hot-Codierung für jedes Element 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 |
„Violett“ | 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 an den Featurevektor übergeben wird. Das Modell lernt eine separate Gewichtung für jedes Element des Merkmalsvektors.
Die folgende Abbildung zeigt die verschiedenen Transformationen in der Vokabulardarstellung:
Dünne Darstellung
Ein Feature, dessen Werte überwiegend null (oder leer) sind, wird als sperriges Feature bezeichnet. Viele kategorische Merkmale wie car_color
sind in der Regel spärliche Merkmale.
Bei der spaltensparenden Darstellung wird die Position von 1.0 in einem spärlichen Vektor gespeichert. Der One-Hot-Vektor für "Blue"
sieht beispielsweise so aus:
[0, 0, 1, 0, 0, 0, 0, 0]
Da sich 1
an Position 2 befindet (beim Start der Zählung bei 0), sieht die dünnbesetzte Darstellung für den vorherigen One-Hot-Vektor so aus:
2
Beachten Sie, dass die sparse Darstellung viel weniger Arbeitsspeicher verbraucht als der One-Hot-Vektor mit acht Elementen. Wichtig ist, dass das Modell auf dem One-Hot-Vektor trainiert wird, nicht mit der dünnbesetzten Darstellung.
Ausreißer in kategorischen 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 wie "Mauve"
oder "Avocado"
.
Anstatt jeder dieser Abweichungsfarben eine separate Kategorie zuzuweisen, können Sie sie in einer einzigen „Allgemeinen Kategorie“ namens Out-of-Vocabulary (OOV) zusammenfassen. Mit anderen Worten: Alle Abweichungsfarben werden in einem einzigen Abweichungs-Bucket zusammengefasst. Das System lernt ein einzelnes Gewicht für diesen Ausreißer-Bucket.
Hochdimensionale kategorische Merkmale codieren
Einige kategoriale Merkmale haben eine hohe Anzahl von Dimensionen, wie in der folgenden Tabelle gezeigt:
Name der Funktion | Anzahl der Kategorien | Beispielkategorien |
---|---|---|
words_in_english | ~ 500.000 | „glücklich“, „spazieren“ |
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 zu Einbettungen beschrieben werden, sind in der Regel eine viel bessere Wahl. Durch Einbettungen wird die Anzahl der Dimensionen erheblich reduziert, was Modelle in zwei wichtigen Bereichen nutzen kann:
- Das Modell wird in der Regel schneller trainiert.
- Mit dem erstellten Modell lassen sich in der Regel schneller Vorhersagen treffen. Das Modell hat also eine geringere Latenz.
Hash-Technologie (auch Hash-Trick genannt) ist eine weniger gängige Methode, um die Anzahl der Dimensionen zu reduzieren.