Кейс-стаді з хвороб нирок 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=____
)