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 der 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, basierend unter anderem auf einem kategorischen Feature namens car_color
.
Vielleicht sind rote Autos mehr wert als grüne.
Da Hersteller nur eine begrenzte Anzahl von Außenfarben anbieten, ist car_color
ein niedrigdimensionales kategorisches Merkmal.
Die folgende Abbildung zeigt ein Vokabular (mögliche Werte) für car_color
:
Übung: Wissen testen
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:
Nachdem Sie Strings in eindeutige Indexnummern umgewandelt haben, müssen Sie die Daten weiter verarbeiten, um sie so darzustellen, dass das Modell aussagekräftige Beziehungen zwischen den Werten lernen kann. Wenn die kategorischen Feature-Daten als indexierte Ganzzahlen belassen und in ein Modell geladen werden, werden die indexierten Werte im Modell als kontinuierliche Gleitkommazahlen behandelt. Das Modell würde dann „lila“ sechsmal wahrscheinlicher als „orange“ betrachten.
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 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 |
„Brown“ | 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 bei der Wortschatzrepräsentation:
Sparse 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 das 1
an Position 2 befindet (wenn die Zählung bei 0 beginnt), lautet die spärliche Darstellung für den obigen One-Hot-Vektor:
2
Beachten Sie, dass die sparse Darstellung viel weniger Arbeitsspeicher verbraucht als der One-Hot-Vektor mit acht Elementen. Das Modell muss mit dem One-Hot-Vektor und nicht mit der spärlichen Darstellung trainiert werden.
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 kategorische Merkmale haben eine große Anzahl von Dimensionen, wie die in der folgenden Tabelle:
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. Mithilfe von Einbettungen lässt sich die Anzahl der Dimensionen erheblich reduzieren. Das hat zwei wichtige Vorteile für Modelle:
- 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.
Weitere Informationen zum Hash-Verfahren