One-Hot-Encoding
In den USA bestimmt dein Wohnort, welche Schulen deine Kinder besuchen können. Daher ist es verständlich, dass vielen Menschen wichtig ist, in welchen Schulbezirken ihr zukünftiges Zuhause liegt. Die Schulbezirke sind zwar in SCHOOLDISTRICTNUMBER nummeriert, inhaltlich handelt es sich aber um kategoriale Werte. Das heißt: Summen oder Mittelwerte dieser Werte haben keine sinnvolle Bedeutung. In diesem Beispiel wandeln wir SCHOOLDISTRICTNUMBER deshalb von einer kategorialen Variable in einen numerischen Vektor um, den wir später in unserem Machine-Learning-Modell nutzen können.
Diese Übung ist Teil des Kurses
<Kurs>Feature Engineering mit PySpark</Kurs>Übungsanweisungen
- Erzeuge einen
StringIndexer-Transformer mit dem Namenstring_indexermitSCHOOLDISTRICTNUMBERals Eingabe undSchool_Indexals Ausgabe. - Wende den Transformer
string_indexeraufdfmitfit()undtransform()an. Speichere das transformierte DataFrame inindexed_df. - Erstelle einen
OneHotEncoder-Transformer mit dem Namenencoderund verwendeSchool_Indexals Eingabe undSchool_Vecals Ausgabe. - Wende die Transformation auf
indexed_dfmittransform()an. Untersuche die einzelnen Schritte der Transformation mit dem bereitgestellten Code.
Interaktive praktische Übung
Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.
from pyspark.ml.feature import OneHotEncoder, StringIndexer
# Map strings to numbers with string indexer
string_indexer = ____(inputCol=____, outputCol=____)
indexed_df = ____.____(df).____(df)
# Onehot encode indexed values
encoder = ____(inputCol=____, outputCol=____)
encoded_df = ____.____(indexed_df)
# Inspect the transformation steps
encoded_df[['SCHOOLDISTRICTNUMBER', 'School_Index', 'School_Vec']].show(truncate=100)