K 折交叉验证
您将处理来自 Kaggle playground 竞赛子样本的二分类问题。该竞赛的目标是预测著名篮球运动员科比·布莱恩特在某次投篮中是否命中。
训练数据已作为 bryant_shots DataFrame 提供在您的工作区中。它包含 10,000 次投篮及其属性,并带有一个 target 变量 "shot\_made\_flag" —— 表示该投篮是否命中。
数据中的一个特征是 "game_id" —— 投篮发生的具体比赛。共有 541 场不同的比赛。因此,您面对的是一个高基数的分类特征。让我们使用目标均值来对其进行编码!
假设您使用 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))