ПочатиПочніть безкоштовно

Кейс-стаді з хвороб нирок I: заповнювач для категоріальних даних

Тепер ви продовжите роботу з конвеєрами на наборі даних, який потребує значно більше попередньої обробки. У наборі даних про хронічну хворобу нирок є як категоріальні, так і числові ознаки, але також багато пропущених значень. Мета — передбачити, у кого є хронічна хвороба нирок, використовуючи різні показники крові як ознаки.

Як згадав Сергій у відео, ви познайомитеся з новою бібліотекою — sklearn_pandas, яка дозволяє поєднувати значно більше кроків обробки в межах конвеєра, ніж наразі підтримує scikit-learn. Зокрема, ви зможете використовувати клас DataFrameMapper() для застосування будь-якого перетворювача, сумісного зі sklearn, до стовпців датафрейму; результатом може бути або масив NumPy, або DataFrame.

Ми також створили перетворювач під назвою Dictifier, який інкапсулює перетворення DataFrame за допомогою .to_dict("records"), щоб вам не довелося робити це явно (і щоб воно працювало в конвеєрі). Нарешті, ми надали список назв ознак у kidney_feature_names, назву цільової змінної в kidney_target_name, ознаки в X і ціль у y.

У цій вправі ваше завдання — застосувати SimpleImputer зі sklearn, щоб заповнити всі категоріальні стовпці в наборі даних. Орієнтуйтеся на те, як було створено мапер для числового заповнення, як на шаблон. Бачите ключові аргументи input_df=True і df_out=True? Вони потрібні, щоб ви могли працювати з DataFrame, а не з масивами. Типово перетворювачам передається масив numpy вибраних стовпців як вхід, і відповідно вихід DataFrameMapper також є масивом. Історично перетворювачі scikit-learn були спроєктовані для роботи з масивами numpy, а не з DataFrame з pandas, хоча їхні базові інтерфейси індексації подібні.

Ця вправа є частиною курсу

Екстремальний градієнтний бустинг з XGBoost

Переглянути курс

Інструкції до вправи

  • Застосуйте категоріальний заповнювач за допомогою DataFrameMapper() і SimpleImputer(). SimpleImputer() не потребує жодних аргументів. Стовпці містяться в categorical_columns. Обов'язково вкажіть input_df=True і df_out=True, а як змінну-ітератор у списковому включенні використайте category_feature.

Інтерактивна практична вправа

Спробуйте виконати цю вправу, доповнивши цей зразок коду.

# 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=____
                                               )
Редагувати та запускати код