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
<Kurs>Extreme Gradient Boosting mit XGBoost</Kurs>Übungsanweisungen
- 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 praktische Übung
Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.
# 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())