K-fold cross-validation
Bạn sẽ làm việc với một bài toán phân loại nhị phân trên một mẫu con từ cuộc thi Kaggle playground. Mục tiêu của cuộc thi là dự đoán liệu vận động viên bóng rổ nổi tiếng Kobe Bryant ghi điểm hay ném trượt một cú ném cụ thể.
Dữ liệu huấn luyện có sẵn trong workspace của bạn dưới dạng DataFrame bryant_shots. Nó chứa dữ liệu về 10.000 cú ném với các thuộc tính của chúng và biến target "shot\_made\_flag" — cho biết cú ném có ghi điểm hay không.
Một trong các đặc trưng trong dữ liệu là "game_id" — trận đấu cụ thể nơi cú ném được thực hiện. Có 541 trận khác nhau. Vậy là bạn đang xử lý một đặc trưng phân loại có số hạng mục rất lớn (high-cardinality). Hãy mã hóa nó bằng trung bình theo mục tiêu (target mean)!
Giả sử bạn dùng 5-fold cross-validation và muốn đánh giá đặc trưng đã được mã hóa theo trung bình mục tiêu trên tập validation cục bộ.
Bài tập này là một phần của khóa học
Chinh phục cuộc thi Kaggle bằng Python
Hướng dẫn bài tập
- Để làm được điều này, bạn cần lặp lại quy trình mã hóa cho đặc trưng phân loại
"game_id"riêng trong từng lần chia fold. Mục tiêu của bạn là chỉ định tất cả tham số còn thiếu cho lời gọi hàmmean_target_encoding()bên trong mỗi lần chia fold. - Nhớ rằng các tham số
trainvàtestkỳ vọng nhận các DataFrame train và test. - Trong khi đó, các tham số
targetvàcategoricalkỳ vọng tên của biến mục tiêu và đặc trưng phân loại cần được mã hóa.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# 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))