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
Pokyny k cvičení
- Aplikuj kategorický imputer pomocí
DataFrameMapper()aSimpleImputer(). DoSimpleImputer()není potřeba předávat žádné argumenty. Sloupce jsou uloženy vcategorical_columns. Nezapomeň nastavitinput_df=Trueadf_out=Truea v list comprehension použij jako proměnnou iterátorucategory_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=____
)