K-fold cross-validation
Lavorerai su un problema di classificazione binaria usando un sottoinsieme di una competition Kaggle playground. L'obiettivo è prevedere se il famoso giocatore di basket Kobe Bryant ha segnato o sbagliato un determinato tiro.
I dati di train sono disponibili nel tuo workspace come DataFrame bryant_shots. Contiene i dati su 10.000 tiri con le loro proprietà e una variabile target "shot\_made\_flag": se il tiro è stato segnato oppure no.
Una delle feature nei dati è "game_id", ovvero la partita in cui è stato effettuato il tiro. Ci sono 541 partite distinte. Quindi stai gestendo una feature categorica ad alta cardinalità. Codifichiamola usando la media del target!
Supponi di usare una cross-validation a 5 fold e di voler valutare una feature codificata con target mean sulla validazione locale.
Questo esercizio fa parte del corso
Vincere una competizione Kaggle con Python
Istruzioni dell'esercizio
- Per ottenere questo risultato, devi ripetere la procedura di codifica per la feature categorica
"game_id"separatamente all'interno di ciascuno split delle fold. Il tuo obiettivo è specificare tutti i parametri mancanti per la chiamata alla funzionemean_target_encoding()all'interno di ciascuno split delle fold. - Ricorda che i parametri
trainetestsi aspettano i DataFrame di train e di test. - Mentre i parametri
targetecategoricalsi aspettano i nomi della variabile target e della feature categorica da codificare.
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
# 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))