Einige Ihrer Features sind möglicherweise separate Werte, die nicht in einer geordneten Beziehung sind. Beispiele sind Hunderassen, Wörter oder Postleitzahlen. Diese Merkmale werden als kategorial bezeichnet. Jeder Wert wird als Kategorie bezeichnet. Sie können kategoriale Werte als Strings oder sogar Zahlen darstellen. Sie können diese Werte jedoch nicht miteinander vergleichen oder voneinander subtrahieren.
Häufig sollten Sie Merkmale mit Ganzzahlwerten als kategorische und nicht als numerische Daten darstellen. Nehmen wir als Beispiel ein Postleitzahlen-Feature, bei dem die Werte Ganzzahlen sind. Wenn Sie dieses Merkmal numerisch falsch darstellen, fordern Sie das Modell auf, eine numerische Beziehung zwischen verschiedenen Postleitzahlen zu finden. Beispiel: Sie erwarten, dass das Modell ermittelt, dass die Postleitzahl 20004 doppelt oder halb so groß ist wie die Postleitzahl 10002. Wenn Sie Postleitzahlen als kategoriale Daten darstellen, ermöglichen Sie es dem Modell, für jede Postleitzahl separate Signale zu finden.
Wenn die Anzahl der Kategorien eines Datenfelds gering ist, z. B. der Wochentag oder eine eingeschränkte Farbpalette, können Sie für jede Kategorie ein eindeutiges Merkmal festlegen. Beispiel:
Abbildung 1: Eine eindeutige Funktion für jede Kategorie
Ein Modell kann dann für jede Farbe ein separates Gewicht lernen. Das Modell könnte beispielsweise lernen, dass rote Autos teurer sind als grüne Fahrzeuge.
Die Funktionen können dann indexiert werden.
Abbildung 2: Indexierte Funktionen
Diese Art der Zuordnung wird als Vokabular bezeichnet.
Vokabular
In einem Vokabular steht jeder Wert für eine einzigartige Funktion.
Index Number | Category |
---|---|
0 | Red |
1 | Orange |
2 | Blue |
... | ... |
Das Modell sucht den Index aus dem String und weist 1,0 dem entsprechenden Slot im Featurevektor und 0,0 allen anderen Slots im Featurevektor zu.
Abbildung 3: Der End-to-End-Prozess, um Kategorien Merkmalsvektoren zuzuordnen.
Hinweis zur dünnbesetzten Darstellung
Wenn Ihre Kategorien die Wochentage sind, könnten Sie beispielsweise Freitag mit dem Featurevektor [0, 0, 0, 0, 1, 0, 0] darstellen. In den meisten Implementierungen von ML-Systemen wird dieser Vektor jedoch mit geringer Größe im Arbeitsspeicher dargestellt. Eine gängige Darstellung ist eine Liste von nicht leeren Werten und den entsprechenden Indexen, z. B. 1.0 für den Wert und [4] für den Index. Auf diese Weise sparen Sie weniger Arbeitsspeicher und speichern eine große Menge an Nullen. Außerdem ermöglicht dies eine effizientere Matrixmultiplikation. In Bezug auf die zugrunde liegende Mathematik entspricht [4] [0, 0, 0, 0, 1, 0, 0].
Nicht mehr im Vokabular
Numerische Daten enthalten Ausreißer, aber auch kategorische Daten. Nehmen wir als Beispiel einen Datensatz mit Beschreibungen von Autos. Eine der Funktionen dieses Datensatzes könnte die Farbe des Autos sein. Nehmen wir an, dass die üblichen Autofarben (Schwarz, Weiß, Grau usw.) in diesem Dataset gut dargestellt sind und Sie jede Farbe in einer Kategorie zusammenfassen, um zu erfahren, wie sich diese verschiedenen Farben auf den Wert auswirken. Angenommen, dieser Datensatz enthält eine kleine Anzahl von Autos mit exzentrischen Farben (Mauve, Puce, Avocado). Anstatt jeder dieser Farben eine separate Kategorie zuzuweisen, könnten Sie sie in einer Catchall-Kategorie zusammenfassen, die Out of Vocab (OOV) ist. Durch den Einsatz eines OOV verschwendet das System keine Zeit mit dem Training der einzelnen seltenen Farben.
Hashing
Eine weitere Option besteht darin, jeden String (Kategorie) in den verfügbaren Indexbereich zu hashen. Das Hashen führt häufig zu Kollisionen. Sie verlassen sich aber darauf, dass das Modell eine gemeinsame Darstellung der Kategorien im selben Index lernt, die für das angegebene Problem gut funktioniert.
Bei wichtigen Begriffen kann das Hashen aufgrund von Konflikten schlechter sein als die Auswahl eines Vokabulars. Hashing erfordert hingegen kein Vokabular. Dies ist von Vorteil, wenn sich die Featureverteilung mit der Zeit stark ändert.
Abbildung 4: Elemente einem Vokabular zuordnen
Hybrid-Hashing und Vokabular
Sie können einen Hybridansatz verfolgen und Hashing mit einem Vokabular kombinieren. Verwenden Sie für die wichtigsten Kategorien in Ihren Daten ein Vokabular, ersetzen Sie den OOV-Bucket jedoch durch mehrere OOV-Buckets und weisen Sie dann mithilfe von Hashing Kategorien Kategorien zu.
Die Kategorien in den Hash-Buckets müssen einen Index gemeinsam nutzen und das Modell wird wahrscheinlich keine guten Vorhersagen machen. Wir haben jedoch einen Teil des Arbeitsspeichers zugewiesen, um die Kategorien außerhalb unseres Vokabulars zu lernen.
Abbildung 5: Vokabular und Hashing in einem Hybridansatz
Hinweis zu Einbettungen
Wie bereits im Crashkurs für maschinelles Lernen erwähnt, handelt es sich bei einer Einbettung um ein kategoriales Merkmal, das als kontinuierlicher Wert dargestellt wird. Tiefe Modelle konvertieren häufig die Indexe von einem Index in eine Einbettung.
Abbildung 6: Featurevektoren durch Einbetten dünnbesetzt
Die anderen besprochenen Transformationen könnten auf einem Laufwerk gespeichert werden, Einbettungen sind jedoch anders. Da Einbettungen trainiert werden, sind sie keine typische Datentransformation – sie sind Teil des Modells. Sie werden mit anderen Modellgewichten trainiert und haben eine äquivalente Funktionalität.
Was ist mit vortrainierten Einbettungen? Vortrainierte Einbettungen können in der Regel während des Trainings dennoch geändert werden, sodass sie konzeptionell Teil des Modells sind.