K-fold-Cross-Validation
Du arbeitest an einem binären Klassifikationsproblem mit einer Teilstichprobe aus einer Kaggle-Playground-Competition. Ziel der Competition ist es, vorherzusagen, ob der berühmte Basketballspieler Kobe Bryant einen Korb erzielt oder einen bestimmten Wurf verfehlt hat.
Die Trainingsdaten stehen dir in deinem Workspace als DataFrame bryant_shots zur Verfügung. Er enthält Daten zu 10.000 Würfen mit ihren Eigenschaften und einer Zielvariable "shot\_made\_flag" – also ob der Wurf getroffen wurde oder nicht.
Eines der Merkmale in den Daten ist "game_id" – das konkrete Spiel, in dem der Wurf stattfand. Es gibt 541 verschiedene Spiele. Du hast es also mit einem kategorialen Merkmal mit hoher Kardinalität zu tun. Lass es uns mit einem Target-Mean encodieren!
Angenommen, du verwendest eine 5-fache Cross-Validation und möchtest ein mean-target-encodiertes Merkmal in der lokalen Validierung auswerten.
Diese Übung ist Teil des Kurses
Eine Kaggle-Competition in Python gewinnen
Anleitung zur Übung
- Dafür musst du das Encoding-Verfahren für das kategoriale Merkmal
"game_id"innerhalb jedes Fold-Splits separat wiederholen. Dein Ziel ist es, alle fehlenden Parameter für den Aufruf der Funktionmean_target_encoding()innerhalb jedes Fold-Splits anzugeben. - Denk daran, dass die Parameter
trainundtestdie jeweiligen Train- und Test-DataFrames erwarten. - Die Parameter
targetundcategoricalerwarten hingegen die Namen der Zielvariable bzw. des zu encodierenden kategorialen Merkmals.
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
# 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))