Étude de cas sur les maladies rénales I : imputeur catégoriel
Vous allez maintenant poursuivre votre exploration de l'utilisation de pipelines avec un jeu de données qui exige beaucoup plus de préparation. Le jeu de données sur la maladie rénale chronique comprend des variables catégorielles et numériques, mais comporte beaucoup de valeurs manquantes. L'objectif ici est de prédire qui présente une maladie rénale chronique à partir de divers indicateurs sanguins comme caractéristiques.
Comme Sergey l'a mentionné dans la vidéo, vous découvrirez une nouvelle bibliothèque, sklearn_pandas, qui vous permet d'enchaîner beaucoup plus d'étapes de traitement à l'intérieur d'un pipeline que ce que scikit-learn prend actuellement en charge. Plus précisément, vous pourrez utiliser la classe DataFrameMapper() pour appliquer n'importe quel transformeur compatible avec sklearn aux colonnes d'un DataFrame; la sortie peut être soit un tableau NumPy, soit un DataFrame.
Nous avons aussi créé un transformeur appelé Dictifier qui encapsule la conversion d'un DataFrame au moyen de .to_dict("records") sans que vous ayez à le faire explicitement (et pour que cela fonctionne dans un pipeline). Enfin, nous avons également fourni la liste des noms de variables dans kidney_feature_names, le nom de la cible dans kidney_target_name, les caractéristiques dans X et la cible dans y.
Dans cet exercice, votre tâche consiste à appliquer le SimpleImputer de sklearn afin d'imputer toutes les colonnes catégorielles du jeu de données. Vous pouvez vous inspirer de la façon dont le mappeur d'imputation numérique a été créé comme modèle. Vous voyez les paramètres nommés input_df=True et df_out=True? Ils servent à travailler avec des DataFrames plutôt qu'avec des tableaux. Par défaut, les transformeurs reçoivent en entrée un tableau numpy des colonnes sélectionnées et, par conséquent, la sortie du mappeur de DataFrame est aussi un tableau. Historiquement, les transformeurs de scikit-learn ont été conçus pour fonctionner avec des tableaux numpy, et non avec des DataFrames pandas, même si leurs interfaces d'indexation de base sont similaires.
Cette activité fait partie du cours
Amorçage de gradient avancé avec XGBoost
Instructions de l’exercice
- Appliquez l'imputeur catégoriel en utilisant
DataFrameMapper()etSimpleImputer().SimpleImputer()n'a pas besoin de paramètres. Les colonnes se trouvent danscategorical_columns. Assurez-vous d'indiquerinput_df=Trueetdf_out=True, et utilisezcategory_featurecomme variable d'itération dans la compréhension de liste.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
# Import necessary modules
from sklearn_pandas import DataFrameMapper
from sklearn.impute import SimpleImputer
# Check number of nulls in each feature column
nulls_per_column = X.isnull().sum()
print(nulls_per_column)
# Create a boolean mask for categorical columns
categorical_feature_mask = X.dtypes == object
# Get list of categorical column names
categorical_columns = X.columns[categorical_feature_mask].tolist()
# Get list of non-categorical column names
non_categorical_columns = X.columns[~categorical_feature_mask].tolist()
# Apply numeric imputer
numeric_imputation_mapper = DataFrameMapper(
[([numeric_feature], SimpleImputer(strategy="median")) for numeric_feature in non_categorical_columns],
input_df=True,
df_out=True
)
# Apply categorical imputer
categorical_imputation_mapper = ____(
[(category_feature, ____) for ____ in ____],
input_df=____,
df_out=____
)