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 à XGBoost, parcourons le processus étape par étape.
D’abord, vous devrez remplacer les valeurs manquantes : comme vous l’avez constaté, la colonne LotFrontage contient de nombreuses valeurs manquantes. Ensuite, vous devrez encoder toutes les colonnes catégorielles du jeu de données en utilisant un one-hot encoding afin qu’elles soient représentées numériquement. Vous pouvez revoir cette vidéo du cours Supervised Learning with scikit-learn pour vous rafraîchir la mémoire sur le concept.
Les données comportent cinq colonnes catégorielles : MSZoning, PavedDrive, Neighborhood, BldgType et HouseStyle. Scikit-learn propose une fonction LabelEncoder qui convertit les valeurs de chaque colonne catégorielle en entiers. Vous allez vous entraîner à l’utiliser ici.
Cet exercice fait partie du cours
Extreme Gradient Boosting avec XGBoost
Instructions
- Importez
LabelEncoderdepuissklearn.preprocessing. - Remplacez les valeurs manquantes de la colonne
LotFrontagepar0avec.fillna(). - Créez un masque booléen pour les colonnes catégorielles. Pour cela, vérifiez si
df.dtypesest égal àobject. - Créez un objet
LabelEncoder. Procédez comme pour instancier n’importe quel 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 cet exemple de code.
# 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())