开始使用免费开始使用

K 折交叉验证

您将处理来自 Kaggle playground 竞赛子样本的二分类问题。该竞赛的目标是预测著名篮球运动员科比·布莱恩特在某次投篮中是否命中。

训练数据已作为 bryant_shots DataFrame 提供在您的工作区中。它包含 10,000 次投篮及其属性,并带有一个 target 变量 "shot\_made\_flag" —— 表示该投篮是否命中。

数据中的一个特征是 "game_id" —— 投篮发生的具体比赛。共有 541 场不同的比赛。因此,您面对的是一个高基数的分类特征。让我们使用目标均值来对其进行编码!

假设您使用 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))
编辑并运行代码