LoslegenKostenlos loslegen

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

Kurs anzeigen

Interaktive Übung

In dieser interaktiven Übung kannst du die Theorie in die Praxis umsetzen.

Übung starten