Kategoriale Daten umwandeln

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:

Jede Farbe in der Palette wird als separates Merkmal dargestellt.
Das heißt, jede Farbe ist ein separater Merkmal im Merkmalsvektor.
Rot ist beispielsweise ein Merkmal, Orange ist ein separates Merkmal usw. 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.

Jede Farbe in der Palette gehört jetzt zum selben Element. 
Das heißt, die Farbe ist jetzt nur ein einzelnes Element im Featurevektor.
Jede Farbe hat einen eindeutigen Wert. Rot hat beispielsweise den Wert 0, Orange den Wert 1 und so weiter. 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 NumberCategory
0Red
1Orange
2Blue
......

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.

Diagramm des gesamten Prozesss zum Zuweisen von Kategorien zu Featurevektoren
Im Diagramm sind die Eingabefeatures gelb, orange, blau, blau. Das System verwendet ein gespeichertes Vokabular (Rot ist 0, Orange ist 1, Blau ist 2, Gelb ist 3 usw.), um den Eingabewert einer ID zuzuordnen. Das System ordnet daher 3, 1, 2, 2 Gelb, Orange, Blau, Blau zu. Das System konvertiert diese Werte dann in einen One-Hot-Merkmalsvektor. Beispiel: Bei einem System mit sieben möglichen Farben wird 3 zu 0,0, 0,0, 0,0, 1,0, 0,0, 0,0, 0,0. 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.

Diagramm mit zwei Wortlisten Eine Liste besteht aus zehn Wörtern. Die andere Liste enthält die zehn Wörter, unterteilt in acht Hash-Buckets. 6 Hash-Buckets enthalten also ein Wort, während 2 der Hash-Buckets jeweils 2 Wörter enthalten.  Jeder Hash-Bucket wird durch eine Zahl von 1 bis einschließlich 8 identifiziert. 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.

Diagramm mit drei Wortlisten Eine Liste besteht aus 10 Wörtern zur Kategorisierung. In den anderen beiden Listen werden diese 10 Wörter Vokabular und Hash-Buckets zugeordnet. Das heißt, 5 Wörter werden direkt dem Vokabular zugeordnet, 5 weitere Wörter zwei Hash-Buckets. Ein Hash-Bucket enthält zwei Wörter, der andere drei.  Das Vokabular enthält gängige Wörter, der Hash-Bucket enthält seltene Wörter. 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.

Diagramm mit durchgängigem Prozess zum Zuweisen von Kategorien zu Merkmalsvektoren über Einbettungen Eine Einbettungstabelle besteht aus einem nummerierten Satz von Zeilen. Jede Zeile besteht aus einer Reihe von Gleitkommawerten zwischen 0,0 und 1,0. Zum Konvertieren einer Kategorie kopiert das System die entsprechende Zeile aus der Einbettungstabelle.
Wenn die Eingabekategorie beispielsweise 0 war, kopiert das System die erste Zeile der Einbettungstabelle in den Featurevektor. Wenn die Eingabekategorie 1 war, kopiert das System die zweite Zeile der Einbettungstabelle in den Featurevektor. 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.