Kom igångKom igång gratis

Fallstudie njursjukdom I: Kategorisk imputation

Nu fortsätter du att utforska pipelines med ett dataset som kräver betydligt mer databearbetning. Datasetet för kronisk njursjukdom innehåller både kategoriska och numeriska särdrag, men har många saknade värden. Målet är att förutsäga vem som har kronisk njursjukdom utifrån olika blodvärden som särdrag.

Som Sergey nämnde i videon introduceras du nu till ett nytt bibliotek, sklearn_pandas, som låter dig kedja ihop fler bearbetningssteg i en pipeline än vad scikit-learn stöder direkt. Mer specifikt kan du använda klassen DataFrameMapper() för att tillämpa valfri sklearn-kompatibel transformer på DataFrame-kolumner, där resultatet kan vara antingen en NumPy-array eller en DataFrame.

Vi har också skapat en transformer kallad Dictifier som hanterar konverteringen av en DataFrame med .to_dict("records") utan att du behöver göra det explicit – och så att det fungerar i en pipeline. Dessutom har vi tillhandahållit listan med särdragsnamn i kidney_feature_names, målvariabelns namn i kidney_target_name, särdragen i X och målvariabeln i y.

I den här övningen är din uppgift att tillämpa sklearns SimpleImputer för att imputera alla kategoriska kolumner i datasetet. Du kan använda den numeriska imputationsmappern som mall. Lägg märke till nyckelordsargumenten input_df=True och df_out=True – de används för att du ska kunna arbeta med DataFrames i stället för arrayer. Som standard skickas en numpy-array av de valda kolumnerna till transformerna, och därmed är även utdata från DataFrame-mappern en array. Scikit-learns transformers har historiskt sett utformats för att fungera med numpy-arrayer, inte pandas DataFrames, även om deras grundläggande indexeringsgränssnitt liknar varandra.

Den här övningen är en del av kursen

Extreme Gradient Boosting med XGBoost

Visa kurs

Övningsinstruktioner

  • Tillämpa den kategoriska imputeraren med DataFrameMapper() och SimpleImputer(). SimpleImputer() behöver inga argument. Kolumnerna finns i categorical_columns. Se till att ange input_df=True och df_out=True, och använd category_feature som iteratorvariabel i listomfattningen.

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

# 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=____
                                               )
Redigera och kör kod