Validare încrucișată K-fold
Vei lucra cu o problemă de clasificare binară pe un eșantion dintr-o competiție Kaggle playground. Obiectivul acestei competiții este să prezici dacă celebrul jucător de baschet Kobe Bryant a marcat sau a ratat un anumit șut.
Datele de antrenament sunt disponibile în spațiul tău de lucru sub forma DataFrame-ului bryant_shots. Acesta conține date despre 10.000 de șuturi, cu proprietățile lor și variabila țintă "shot\_made\_flag" -- dacă șutul a fost marcat sau nu.
Una dintre caracteristici este "game_id" -- meciul specific în care a fost efectuat șutul. Există 541 de meciuri distincte, ceea ce înseamnă că ai de-a face cu o caracteristică categorială cu cardinalitate ridicată. Hai să o codificăm folosind media țintei!
Să presupunem că folosești validare încrucișată cu 5 fold-uri și vrei să evaluezi o caracteristică codificată prin media țintei pe validarea locală.
Acest exercițiu face parte din cursul
Câștigarea unei competiții Kaggle în Python
Instrucțiuni pentru exercițiu
- Pentru a realiza acest lucru, trebuie să repeți procedura de codificare pentru caracteristica categorială
"game_id"în interiorul fiecărei împărțiri pe fold, separat. Scopul tău este să specifici toți parametrii lipsă pentru apelul funcțieimean_target_encoding()din interiorul fiecărei împărțiri pe fold. - Reamintește-ți că parametrii
trainșitestașteaptă DataFrame-urile de antrenament și testare. - În timp ce parametrii
targetșicategoricalașteaptă numele variabilei țintă, respectiv al caracteristicii categoriale care urmează să fie codificate.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
# 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))