K-fold křížová validace
Budeš pracovat s problémem binární klasifikace na podvzorku z Kaggle playground soutěže. Cílem této soutěže je předpovědět, zda slavný basketbalista Kobe Bryant proměnil koš, nebo konkrétní střelu minul.
Trénovací data jsou dostupná v tvém pracovním prostoru jako DataFrame bryant_shots. Obsahuje data o 10 000 střelách s jejich vlastnostmi a cílovou proměnnou "shot\_made\_flag" -- zda byl koš proměněn, nebo ne.
Jedním z příznaků v datech je "game_id" -- konkrétní zápas, ve kterém byla střela provedena. Celkem je zde 541 různých zápasů, takže pracuješ s kategorickým příznakem s vysokou kardinalitou. Zakódujme ho pomocí cílového průměru!
Předpokládejme, že používáš 5-fold křížovou validaci a chceš vyhodnotit příznak zakódovaný průměrem cílové proměnné na lokální validaci.
Toto cvičení je součástí kurzu
Jak vyhrát soutěž na Kaggle v Pythonu
Pokyny k cvičení
- Abys toho dosáhl/a, je potřeba zopakovat postup kódování pro kategorický příznak
"game_id"zvlášť v rámci každého rozdělení foldu. Tvým cílem je doplnit všechny chybějící parametry volání funkcemean_target_encoding()uvnitř každého rozdělení foldu. - Nezapomeň, že parametry
trainatestočekávají trénovací a testovací DataFramy. - Zatímco parametry
targetacategoricaločekávají názvy cílové proměnné a kategorického příznaku, který má být zakódován.
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
# 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))