Strings und Faktoren
Wie du weißt, benötigt Spark numerische Daten für die Modellerstellung. Bis jetzt war das kein Problem; auch Spalten mit booleschen Werten lassen sich leicht in Ganzzahlen umwandeln. Du wirst aber auch die Fluggesellschaft und den Zielort des Fluges als Merkmale in deinem Modell verwenden. Diese sind als Strings kodiert und es gibt keine offensichtliche Möglichkeit, sie in einen numerischen Datentyp zu konvertieren.
Glücklicherweise hat PySpark im Untermodul pyspark.ml.features
Funktionen für diesen Fall integriert. Du kannst so genannte „One-Hot-Vektoren“ erstellen, um die Fluggesellschaft und den Zielort jedes Fluges darzustellen. Ein One-Hot-Vektor ist eine Art der Darstellung eines kategorialen Merkmals, bei der jede Beobachtung einen Vektor hat, in dem alle Elemente null sind, außer höchstens einem Element, das den Wert eins (1) hat.
Jedes Element des Vektors entspricht einer Ebene des Merkmals. Du kannst also herausfinden, welche Ebene die richtige ist, indem du schaust, welches Element des Vektors gleich eins (1) ist.
Der erste Schritt zur Kodierung deines kategorialen Merkmals ist die Erstellung eines StringIndexer
. Die Mitglieder dieser Klasse sind Estimator
, die einen DataFrame mit einer Spalte von Strings nehmen und jeden einzelnen String auf eine Zahl abbilden. Dann gibt der Estimator
einen Transformer
zurück, der einen DataFrame entgegennimmt, die Zuordnung als Metadaten an ihn anhängt und einen neuen DataFrame mit einer numerischen Spalte zurückgibt, die der String-Spalte entspricht.
Der zweite Schritt besteht darin, diese numerische Spalte mit Hilfe von OneHotEncoder
als One-Hot-Vektor zu kodieren. Das funktioniert genauso wie bei StringIndexer
, indem du einen Estimator
und dann einen Transformer
erstellst. Das Endergebnis ist eine Spalte, die dein kategoriales Merkmal als Vektor kodiert, der für Machine-Learning-Routinen geeignet ist!
Das klingt kompliziert, aber keine Sorge! Alles, was du beachten musst, ist, dass du einen StringIndexer
und einen OneHotEncoder
erstellen musst, und die Pipeline
wird sich um den Rest kümmern.
Warum muss man ein kategoriales Merkmal als One-Hot-Vektor kodieren?
Diese Übung ist Teil des Kurses
Einführung in PySpark
Interaktive Übung
In dieser interaktiven Übung kannst du die Theorie in die Praxis umsetzen.
