K-fold кросс-валидация
Вы будете работать с задачей бинарной классификации на подвыборке из соревнования Kaggle Playground. Цель соревнования — предсказать, забросил ли знаменитый баскетболист Коби Брайант мяч в корзину или промахнулся в конкретном броске.
Обучающие данные доступны в вашем рабочем пространстве в виде датафрейма bryant_shots. Он содержит информацию о 10 000 бросках с их характеристиками и целевой переменной "shot\_made\_flag" — попал ли игрок в корзину или нет.
Один из признаков в данных — "game_id", то есть конкретная игра, в которой был выполнен бросок. Всего таких игр 541. Таким образом, вы работаете с категориальным признаком высокой мощности. Закодируем его с помощью среднего значения целевой переменной!
Предположим, вы используете 5-кратную кросс-валидацию и хотите оценить признак, закодированный через среднее целевой переменной, на локальной валидации.
Это упражнение является частью курса
Победа в соревновании Kaggle на Python
Инструкции к упражнению
- Для этого необходимо выполнять процедуру кодирования категориального признака
"game_id"отдельно внутри каждого разбиения на фолды. Ваша задача — указать все недостающие параметры при вызове функцииmean_target_encoding()внутри каждого такого разбиения. - Помните, что параметры
trainиtestпринимают обучающий и тестовый датафреймы. - Параметры
targetиcategoricalпринимают названия целевой переменной и категориального признака, который нужно закодировать.
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
# Create 5-fold cross-validation
kf = KFold(n_splits=5, random_state=123, shuffle=True)
# For each folds split
for train_index, test_index in kf.split(bryant_shots):
cv_train, cv_test = bryant_shots.iloc[train_index], bryant_shots.iloc[test_index]
# Create mean target encoded feature
cv_train['game_id_enc'], cv_test['game_id_enc'] = mean_target_encoding(train=cv_train,
test=____,
target='shot_made_flag',
categorical='____',
alpha=5)
# Look at the encoding
print(cv_train[['game_id', 'shot_made_flag', 'game_id_enc']].sample(n=1))