Walidacja krzyżowa k-fold
Będziesz pracować z problemem klasyfikacji binarnej na podzbiorze danych z zawodów Kaggle Playground. Celem tych zawodów jest przewidzenie, czy słynny koszykarz Kobe Bryant trafił do kosza, czy chybił przy danym rzucie.
Dane treningowe są dostępne w twoim środowisku jako ramka danych bryant_shots. Zawiera ona informacje o 10 000 rzutach wraz z ich właściwościami oraz zmienną docelową "shot\_made\_flag" -- określającą, czy rzut trafił do kosza.
Jedną z cech w zbiorze danych jest "game_id" -- identyfikator konkretnego meczu, podczas którego wykonano rzut. W zbiorze znajdują się 543 różne mecze, co oznacza, że masz do czynienia z cechą kategoryczną o wysokiej kardynalności. Zakodujmy ją za pomocą średniej docelowej!
Załóżmy, że stosujesz 5-krotną walidację krzyżową i chcesz ocenić cechę zakodowaną metodą średniej docelowej na lokalnym zbiorze walidacyjnym.
To ćwiczenie jest częścią kursu
Zwycięstwo w konkursie Kaggle w Pythonie
Instrukcje do ćwiczenia
- Aby to osiągnąć, należy przeprowadzić procedurę kodowania cechy kategorycznej
"game_id"osobno dla każdego podziału na foldy. Twoim celem jest uzupełnienie wszystkich brakujących parametrów w wywołaniu funkcjimean_target_encoding()wewnątrz każdego podziału. - Pamiętaj, że parametry
trainitestprzyjmują odpowiednio treningową i testową ramkę danych. - Natomiast parametry
targeticategoricalprzyjmują nazwy zmiennej docelowej oraz cechy kategorycznej, która ma zostać zakodowana.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# 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))