IniziaInizia gratis

Caso di studio sulla malattia renale I: Imputer categorico

Continuerai ora a esplorare l'uso delle pipeline con un insieme di dati che richiede molto più lavoro di pulizia. Il chronic kidney disease dataset contiene sia variabili categoriche sia numeriche, ma presenta molti valori mancanti. L'obiettivo qui è prevedere chi ha una malattia renale cronica dati vari indicatori ematici come feature.

Come Sergey ha menzionato nel video, ti presenteremo una nuova libreria, sklearn_pandas, che ti permette di concatenare molti più passaggi di preprocessing all'interno di una pipeline rispetto a quanto attualmente supportato in scikit-learn. In particolare, potrai usare la classe DataFrameMapper() per applicare qualsiasi trasformatore compatibile con sklearn alle colonne di un DataFrame, ottenendo in output un array NumPy o un DataFrame.

Abbiamo anche creato un trasformatore chiamato Dictifier che incapsula la conversione di un DataFrame usando .to_dict("records") senza che tu debba farlo esplicitamente (e in modo che funzioni in una pipeline). Infine, ti abbiamo fornito l'elenco dei nomi delle feature in kidney_feature_names, il nome del target in kidney_target_name, le feature in X e il target in y.

In questo esercizio, il tuo compito è applicare lo SimpleImputer di sklearn per imputare tutte le colonne categoriche del dataset. Puoi usare come modello il mapper per l'imputazione numerica. Hai notato gli argomenti input_df=True e df_out=True? Servono per lavorare con DataFrame invece che con array. Per impostazione predefinita, ai transformer vengono passati in input gli array numpy delle colonne selezionate e, di conseguenza, anche l'output del DataFrame mapper è un array. Storicamente, i transformer di scikit-learn sono stati progettati per lavorare con array numpy, non con DataFrame pandas, anche se le loro interfacce di indicizzazione di base sono simili.

Questo esercizio fa parte del corso

Extreme Gradient Boosting con XGBoost

Visualizza il corso

Istruzioni dell'esercizio

  • Applica l'imputer categorico usando DataFrameMapper() e SimpleImputer(). SimpleImputer() non richiede argomenti. Le colonne sono contenute in categorical_columns. Assicurati di specificare input_df=True e df_out=True, e usa category_feature come variabile iteratrice nella list comprehension.

Esercizio pratico interattivo

Prova a risolvere questo esercizio completando il codice di esempio.

# 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=____
                                               )
Modifica ed esegui il codice