K 折交叉驗證
你將在 Kaggle playground 競賽的子樣本上處理二元分類問題。此競賽的目標是預測知名籃球員 Kobe Bryant 在特定出手時是投進還是未進。
訓練資料已載入為工作空間中的 bryant_shots DataFrame。它包含 10,000 次出手的屬性,以及一個 target 變數 "shot\_made\_flag"——表示該次出手是否投進。
資料中的其中一個特徵是 "game_id"——該出手所屬的比賽。共有 541 場不同的比賽。因此,這是一個高基數的類別特徵。我們用 target mean(目標平均)來編碼它吧!
假設你使用 5 折交叉驗證,並想在本地驗證上評估經過目標平均編碼的特徵。
本練習屬於課程
用 Python 拿下 Kaggle 競賽
練習說明
- 為了達成此目標,你需要在每個折的分割中,分別對類別特徵
"game_id"重複執行編碼流程。你的任務是為每個折分割內呼叫mean_target_encoding()函式時,補齊所有缺漏的參數。 - 請記得,
train與test參數要傳入對應的 train 與 test DataFrame。 - 而
target與categorical參數則要傳入目標變數名稱與要編碼的類別特徵名稱。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
# 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))