Kodierung kategorialer Spalten I: LabelEncoder
Nachdem du gesehen hast, was nötig ist, um die Immobiliendaten für XGBoost vorzubereiten, gehen wir den Prozess Schritt für Schritt durch.
Zuerst musst du fehlende Werte auffüllen – wie du bereits gesehen hast, enthält die Spalte LotFrontage viele fehlende Werte. Danach musst du alle kategorialen Spalten im Datensatz mithilfe von One-Hot-Encoding bzw. einer numerischen Kodierung umwandeln, damit sie numerisch vorliegen. Zur Auffrischung kannst du dir dieses Video aus dem Kurs Supervised Learning with scikit-learn ansehen.
Die Daten enthalten fünf kategoriale Spalten: MSZoning, PavedDrive, Neighborhood, BldgType und HouseStyle. Scikit-learn bietet mit LabelEncoder eine Funktion, die die Werte in jeder kategorialen Spalte in ganze Zahlen umwandelt. Das übst du hier.
Diese Übung ist Teil des Kurses
Extreme Gradient Boosting mit XGBoost
Anleitung zur Übung
- Importiere
LabelEncoderaussklearn.preprocessing. - Fülle fehlende Werte in der Spalte
LotFrontagemit0über.fillna(). - Erstelle eine boolesche Maske für kategoriale Spalten. Das geht, indem du prüfst, ob
df.dtypesgleichobjectist. - Erzeuge ein
LabelEncoder-Objekt. Das machst du genauso, wie du jeden scikit-learn-Schätzer instanziierst. - Kodieren alle kategorialen Spalten als ganze Zahlen mit
LabelEncoder(). Verwende dazu die Methode.fit_transform()vonlein der bereitgestellten Lambda-Funktion.
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
# Import LabelEncoder
____
# Fill missing values with 0
df.LotFrontage = ____
# Create a boolean mask for categorical columns
categorical_mask = (____ == ____)
# Get list of categorical column names
categorical_columns = df.columns[categorical_mask].tolist()
# Print the head of the categorical columns
print(df[categorical_columns].head())
# Create LabelEncoder object: le
le = ____
# Apply LabelEncoder to categorical columns
df[categorical_columns] = df[categorical_columns].apply(lambda x: ____(x))
# Print the head of the LabelEncoded categorical columns
print(df[categorical_columns].head())