Categorische kolommen encoden I: LabelEncoder
Nu je hebt gezien wat er nodig is om de woningdata klaar te maken voor XGBoost, lopen we het proces stap voor stap door.
Eerst vul je ontbrekende waarden aan—zoals je eerder zag, bevat de kolom LotFrontage veel missende waarden. Daarna moet je alle categorische kolommen in de gegevensset numeriek encoden met one-hot encoding. Je kunt deze video uit Supervised Learning with scikit-learn bekijken voor een korte opfrissing.
De data bevat vijf categorische kolommen: MSZoning, PavedDrive, Neighborhood, BldgType en HouseStyle. Scikit-learn heeft een LabelEncoder-functie die de waarden in elke categorische kolom omzet naar gehele getallen. Je gaat hiermee hier oefenen.
Deze oefening maakt deel uit van de cursus
Extreme Gradient Boosting met XGBoost
Oefeninstructies
- Importeer
LabelEncoderuitsklearn.preprocessing. - Vul ontbrekende waarden in de kolom
LotFrontageaan met0met.fillna(). - Maak een booleaanse mask voor categorische kolommen. Dit kan door te controleren of
df.dtypesgelijk is aanobject. - Maak een
LabelEncoder-object. Dit doe je op dezelfde manier als waarop je een scikit-learn-estimator instantieert. - Encode alle categorische kolommen naar gehele getallen met
LabelEncoder(). Gebruik hiervoor de.fit_transform()-methode vanlein de meegeleverde lambda-functie.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# 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())