Začněte nyníZačněte zdarma

Případová studie: onemocnění ledvin I – kategorická imputace

Teď se podíváš na práci s pipeline na datasetu, který vyžaduje výrazně více předzpracování. Dataset chronického onemocnění ledvin obsahuje jak kategorické, tak numerické příznaky, a navíc má spoustu chybějících hodnot. Cílem je na základě různých krevních ukazatelů předpovědět, kdo chronickým onemocněním ledvin trpí.

Jak Sergey zmínil ve videu, seznámíš se s novou knihovnou sklearn_pandas, která ti umožní řetězit v pipeline mnohem více kroků zpracování, než aktuálně podporuje scikit-learn. Konkrétně budeš moct použít třídu DataFrameMapper() k aplikování libovolného sklearn-kompatibilního transformátoru na sloupce DataFrame, přičemž výstupem může být buď NumPy pole, nebo DataFrame.

Připravili jsme také transformátor Dictifier, který zapouzdřuje převod DataFrame pomocí .to_dict("records") – nemusíš to dělat ručně a zároveň to funguje v rámci pipeline. Dále máš k dispozici seznam názvů příznaků v kidney_feature_names, název cílové proměnné v kidney_target_name, příznaky v X a cílovou proměnnou v y.

Tvým úkolem v tomto cvičení je aplikovat SimpleImputer z knihovny sklearn na imputaci všech kategorických sloupců v datasetu. Jako šablonu můžeš použít způsob, jakým byl vytvořen mapper pro numerickou imputaci. Všimni si argumentů input_df=True a df_out=True – díky nim pracuješ s DataFrame místo polí. Ve výchozím nastavení jsou transformátorům předávána numpy pole vybraných sloupců, a výstup DataFrame mapperu je tedy také pole. Transformátory scikit-learn byly historicky navrženy pro práci s numpy poli, nikoli s pandas DataFrame, přestože jejich základní rozhraní pro indexování jsou podobná.

Toto cvičení je součástí kurzu

Extreme Gradient Boosting with XGBoost

Zobrazit kurz

Pokyny k cvičení

  • Aplikuj kategorický imputer pomocí DataFrameMapper() a SimpleImputer(). Do SimpleImputer() není potřeba předávat žádné argumenty. Sloupce jsou uloženy v categorical_columns. Nezapomeň nastavit input_df=True a df_out=True a v list comprehension použij jako proměnnou iterátoru category_feature.

Interaktivní cvičení na vyzkoušení si v praxi

Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.

# 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=____
                                               )
Upravit a spustit kód