開始使用免費開始

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() 函式時,補齊所有缺漏的參數。
  • 請記得,traintest 參數要傳入對應的 train 與 test DataFrame。
  • targetcategorical 參數則要傳入目標變數名稱與要編碼的類別特徵名稱。

動手互動練習

試著完成這個範例程式碼,體驗一下這個練習。

# 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))
編輯並執行程式碼