Encodage des colonnes catégorielles I : LabelEncoder
Maintenant que vous avez vu ce qu'il faut faire pour préparer les données immobilières pour XGBoost, parcourons le processus étape par étape.
D'abord, vous devrez combler les valeurs manquantes — comme vous l'avez constaté, la colonne LotFrontage en contient beaucoup. Ensuite, vous devrez encoder toutes les colonnes catégorielles de l'ensemble de données à l'aide d'un encodage one-hot afin qu'elles soient représentées numériquement. Vous pouvez revoir cette vidéo du cours Supervised Learning with scikit-learn pour un rappel du concept.
Les données comportent cinq colonnes catégorielles : MSZoning, PavedDrive, Neighborhood, BldgType et HouseStyle. Scikit-learn offre la fonction LabelEncoder qui convertit les valeurs de chaque colonne catégorielle en entiers. Vous allez vous exercer à l'utiliser ici.
Cette activité fait partie du cours
Amorçage de gradient avancé avec XGBoost
Instructions de l’exercice
- Importez
LabelEncoderà partir desklearn.preprocessing. - Remplacez les valeurs manquantes dans la colonne
LotFrontagepar0avec.fillna(). - Créez un masque booléen pour les colonnes catégorielles. Pour ce faire, vérifiez si
df.dtypesest égal àobject. - Créez un objet
LabelEncoder. Procédez comme pour l'instanciation de tout estimateur scikit-learn. - Encodez toutes les colonnes catégorielles en entiers avec
LabelEncoder(). Pour ce faire, utilisez la méthode.fit_transform()deledans la fonction lambda fournie.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
# 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())