K-fold cross-validation
Anda akan mengerjakan masalah klasifikasi biner pada subset dari kompetisi Kaggle playground. Tujuan kompetisi ini adalah memprediksi apakah pemain basket terkenal, Kobe Bryant, berhasil mencetak poin atau gagal pada sebuah percobaan tembakan tertentu.
Data latih tersedia di workspace Anda sebagai DataFrame bryant_shots. Data ini berisi informasi tentang 10.000 tembakan beserta propertinya dan variabel target "shot\_made\_flag" — apakah tembakan tersebut masuk atau tidak.
Salah satu fitur dalam data adalah "game_id" — pertandingan tertentu saat tembakan dilakukan. Terdapat 541 pertandingan yang berbeda. Jadi, Anda berurusan dengan fitur kategorikal berkardinalitas tinggi. Mari kita lakukan encoding menggunakan target mean!
Misalkan Anda menggunakan 5-fold cross-validation dan ingin mengevaluasi fitur hasil target mean encoding pada validasi lokal.
Latihan ini adalah bagian dari kursus
Memenangi Kompetisi Kaggle dengan Python
Petunjuk latihan
- Untuk mencapainya, Anda perlu mengulangi prosedur encoding untuk fitur kategorikal
"game_id"secara terpisah di dalam tiap pemisahan fold. Tujuan Anda adalah melengkapi semua parameter yang belum diisi pada pemanggilan fungsimean_target_encoding()di dalam tiap pemisahan fold. - Ingat bahwa parameter
traindantestmengharapkan DataFrame train dan test. - Sementara parameter
targetdancategoricalmengharapkan nama variabel target dan fitur kategorikal yang akan di-encode.
Latihan interaktif praktis
Cobalah latihan ini dengan menyelesaikan kode contoh berikut.
# 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))