ÎncepețiÎncepe gratuit

Studiu de caz: boli renale I – Imputare categorică

Vei continua să explorezi utilizarea pipeline-urilor cu un set de date care necesită o procesare mai complexă. Setul de date privind boala cronică de rinichi conține atât caracteristici categorice, cât și numerice, dar are multe valori lipsă. Scopul este să prezici cine suferă de boală cronică de rinichi pe baza unor indicatori din sânge utilizați ca atribute.

Așa cum a menționat Sergey în video, vei face cunoștință cu o nouă bibliotecă, sklearn_pandas, care îți permite să înlănțui mai mulți pași de procesare într-un pipeline decât sunt acceptați în mod implicit de scikit-learn. Concret, vei putea folosi clasa DataFrameMapper() pentru a aplica orice transformator compatibil cu sklearn pe coloanele unui DataFrame, iar rezultatul poate fi fie un array NumPy, fie un DataFrame.

Am creat și un transformator numit Dictifier, care încapsulează conversia unui DataFrame prin .to_dict("records") – fără să fie nevoie să o faci explicit – și care funcționează corect într-un pipeline. În plus, am furnizat lista numelor de atribute în kidney_feature_names, numele variabilei țintă în kidney_target_name, atributele în X și ținta în y.

În acest exercițiu, sarcina ta este să aplici SimpleImputer din sklearn pentru a imputa toate coloanele categorice din set. Te poți folosi de modul în care a fost creat numeric_imputation_mapper ca șablon. Observi argumentele cheie input_df=True și df_out=True? Acestea îți permit să lucrezi cu DataFrame-uri în loc de array-uri. În mod implicit, transformatorii primesc la intrare un array numpy cu coloanele selectate, iar rezultatul mapper-ului de DataFrame este tot un array. Transformatorii din Scikit-learn au fost proiectați în mod tradițional pentru array-uri numpy, nu pentru DataFrame-uri pandas, chiar dacă interfețele lor de indexare de bază sunt similare.

Acest exercițiu face parte din cursul

Gradient Boosting Extrem cu XGBoost

Vezi cursul

Instrucțiuni pentru exercițiu

  • Aplică imputatorul categoric folosind DataFrameMapper() și SimpleImputer(). SimpleImputer() nu necesită niciun argument. Coloanele se află în categorical_columns. Asigură-te că specifici input_df=True și df_out=True și folosește category_feature ca variabilă iterator în list comprehension.

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

# 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=____
                                               )
Editează și rulează codul