CommencerCommencer gratuitement

Étude de cas sur les maladies rénales I : imputation des variables catégorielles

Vous allez poursuivre votre exploration des pipelines avec un jeu de données qui demande beaucoup plus de préparation. Le jeu de données sur les maladies rénales chroniques contient des variables catégorielles et numériques, mais présente de nombreuses valeurs manquantes. L’objectif est de prédire qui souffre d’une maladie rénale chronique à partir de différents indicateurs sanguins utilisés comme variables explicatives.

Comme Sergey l’a indiqué dans la vidéo, vous allez découvrir une nouvelle bibliothèque, sklearn_pandas, qui vous permet d’enchaîner bien plus d’étapes de prétraitement dans un pipeline que ce que scikit-learn prend en charge nativement. Plus précisément, vous pourrez utiliser la classe DataFrameMapper() pour appliquer n’importe quel transformateur compatible sklearn à des colonnes de DataFrame, avec une sortie pouvant être un tableau NumPy ou un DataFrame.

Nous avons aussi créé un transformateur appelé Dictifier qui encapsule la conversion d’un DataFrame via .to_dict("records") sans que vous ayez à le faire explicitement (et pour que cela fonctionne dans un pipeline). Enfin, nous vous fournissons la liste des noms de variables dans kidney_feature_names, le nom de la cible dans kidney_target_name, les variables explicatives dans X et la cible dans y.

Dans cet exercice, votre tâche consiste à appliquer SimpleImputer de sklearn pour imputer toutes les colonnes catégorielles du jeu de données. Vous pouvez vous inspirer du mapper d’imputation numérique comme modèle. Vous voyez les arguments nommés input_df=True et df_out=True ? Ils permettent de travailler avec des DataFrames plutôt qu’avec des tableaux. Par défaut, les transformateurs reçoivent en entrée un tableau numpy des colonnes sélectionnées et, en conséquence, la sortie du DataFrame mapper est également un tableau. Historiquement, les transformateurs de scikit-learn sont conçus pour fonctionner avec des tableaux numpy, et non des DataFrames pandas, même si leurs interfaces d’indexation de base sont similaires.

Cet exercice fait partie du cours

Extreme Gradient Boosting avec XGBoost

Afficher le cours

Instructions

  • Appliquez l’imputation des variables catégorielles avec DataFrameMapper() et SimpleImputer(). SimpleImputer() n’a besoin d’aucun argument. Les colonnes sont dans categorical_columns. Veillez à préciser input_df=True et df_out=True, et utilisez category_feature comme variable d’itération dans la compréhension de liste.

Exercice interactif pratique

Essayez cet exercice en complétant cet exemple de code.

# 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=____
                                               )
Modifier et exécuter le code