Der Begriff Dimension ist ein Synonym für die Anzahl der Elemente in einem Merkmalsvektor. Einige kategoriale Merkmale sind niedrigdimensional. Beispiel:
Featurename | Anzahl der Kategorien | Beispielkategorien |
---|---|---|
snowed_today | 2 | Wahr, Falsch |
skill_level | 3 | Anfänger, Fortgeschrittener, 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 Vokabelcodierung behandelt das Modell jeden möglichen kategorialen Wert als separates Merkmal. Während des Trainings lernt das Modell unterschiedliche Gewichte für jede Kategorie.
Angenommen, Sie erstellen ein Modell, um den Preis eines Autos unter anderem auf Grundlage eines kategorialen Features namens car_color
vorherzusagen.
Vielleicht sind rote Autos mehr wert als grüne.
Da Hersteller nur eine begrenzte Anzahl von Außenfarben anbieten, ist car_color
ein kategoriales Merkmal mit geringer Dimensionalität.
Die folgende Abbildung zeigt ein Vokabular (mögliche Werte) für car_color
:
Übung: Wissen testen
"Red"
ist keine Gleitkommazahl. Sie müssen Strings wie "Red"
in Gleitkommazahlen konvertieren.
Indexnummern
ML-Modelle 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 erkennen kann. Wenn die Daten für kategorische Features als indexierte Ganzzahlen belassen und in ein Modell geladen werden, behandelt das Modell die indexierten Werte als kontinuierliche Gleitkommazahlen. Das Modell würde „lila“ dann sechsmal wahrscheinlicher als „orange“ einstufen.
One-Hot-Codierung
Der nächste Schritt beim Erstellen eines Vokabulars besteht darin, jede Indexnummer in ihre One-Hot-Codierung zu konvertieren. Bei der One-Hot-Codierung gilt:
- 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 entsprechende One-Hot-Vektor acht Elemente. - Genau eines der Elemente in einem One-Hot-Vektor hat den Wert 1,0; alle verbleibenden Elemente haben den Wert 0,0.
In der folgenden Tabelle sehen Sie beispielsweise die One-Hot-Codierung für jede Farbe 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 wird der One-Hot-Vektor an den Featurevektor übergeben, nicht der String oder die Indexnummer. Das Modell lernt ein separates Gewicht für jedes Element des Feature-Vektors.
Die folgende Abbildung zeigt die verschiedenen Transformationen in der Vokabeldarstellung:
Dünnbesetzte Darstellung
Ein Merkmal, dessen Werte überwiegend null oder leer sind, wird als spärliches Merkmal bezeichnet. Viele kategoriale Features, z. B. car_color
, sind in der Regel spärliche Features.
Dünnbesetzte Darstellung bedeutet, dass die Position der 1,0 in einem dünnbesetzten Vektor gespeichert wird. Der One-Hot-Vektor für "Blue"
ist beispielsweise:
[0, 0, 1, 0, 0, 0, 0, 0]
Da sich 1
an Position 2 befindet (wenn die Zählung bei 0 beginnt), lautet die Kurzform für den vorherigen One-Hot-Vektor so:
2
Die spärliche Darstellung benötigt viel weniger Speicher als der One-Hot-Vektor mit acht Elementen. Wichtig ist, dass das Modell anhand des One-Hot-Vektors und nicht der spärlichen Darstellung trainiert wird.
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 Ausreißerfarben eine separate Kategorie zuzuweisen, können Sie sie in einer einzigen „Auffangkategorie“ namens out-of-vocabulary (OOV) zusammenfassen. Mit anderen Worten: Alle Farben, die Ausreißer sind, werden in einem einzigen Ausreißer-Bucket zusammengefasst. Das System lernt ein einzelnes Gewicht für diesen Ausreißer-Bucket.
Hochdimensionale kategoriale Features codieren
Einige kategorische Features haben eine hohe Anzahl von Dimensionen, z. B. die in der folgenden Tabelle:
Featurename | Anzahl der Kategorien | Beispielkategorien |
---|---|---|
words_in_english | ~500.000 | „happy“, „walking“ |
US_postal_codes | ~42.000 | „02114“, „90301“ |
last_names_in_Germany | ~850.000 | „Schmidt“, „Schneider“ |
Wenn die Anzahl der Kategorien hoch ist, ist die One-Hot-Codierung in der Regel eine schlechte Wahl. Einbettungen, die in einem separaten Einbettungsmodul beschrieben werden, sind in der Regel eine viel bessere Wahl. Durch Einbettungen wird die Anzahl der Dimensionen erheblich reduziert, was sich auf zwei wichtige Arten auf Modelle auswirkt:
- Das Modell wird in der Regel schneller trainiert.
- Das erstellte Modell leitet Vorhersagen in der Regel schneller ab. Das Modell hat also eine geringere Latenz.
Hashing (auch Hashing-Trick genannt) ist eine weniger gängige Methode, um die Anzahl der Dimensionen zu reduzieren.