Đến nội dung chính
AI cơ bản

Training, Validation và Testing trong Machine Learning

Tách việc học, chọn mô hình và đo khả năng tổng quát hóa mà không rò rỉ dữ liệu.

Mức giải thích

Một phép đánh giá đáng tin phụ thuộc vào cách giữ dữ liệu chưa nhìn thấy, không chỉ vào công thức metric. Ba tập dữ liệu có ba vai trò khác nhau trong vòng phát triển mô hình.

Mục tiêu học tập

  • Nêu đúng vai trò train, validation và test.
  • Nhận ra rò rỉ qua preprocessing, người dùng và thời gian.
  • Chọn split hoặc cross-validation phù hợp đơn vị dữ liệu.

Ba vai trò trong cùng một quy trình

Fit preprocessing và tham số trên train; chọn hyperparameters hoặc threshold bằng validation. Sau khi chốt protocol, có thể refit trên train+validation nếu quy trình cho phép, rồi đánh giá một lần trên test chưa dùng để chọn cấu hình.

Cross-validation luân phiên các fold dùng để fit và validation trong phần dữ liệu phát triển. Một test riêng vẫn cần thiết khi muốn có đánh giá cuối độc lập với quá trình tuning.

Leakage xảy ra trước khi train

Fit scaler, imputer, feature selection trong train hoặc trong từng fold. Với nhiều ảnh của cùng bệnh nhân hoặc video, chia theo group. Với dự đoán tương lai, ưu tiên chia thời gian và kiểm tra các feature chỉ có sau thời điểm dự đoán.

Kiểm tra một split theo group

Mã chỉ minh họa tách group, chưa tối ưu cân bằng lớp hay kích thước. Trong thực tế cần kiểm tra số nhóm, số mẫu và tỷ lệ lớp theo mỗi phần; test quá ít nhóm dễ cho ước lượng biến động lớn.

Workflow & kiến trúc

Chia dữ liệu trước khi fit preprocessing. Train học tham số, validation hỗ trợ chọn cấu hình; test chỉ dùng đánh giá cuối theo protocol đã xác định.
01Định nghĩa đơn vị
02Tách group / thời gian
03Fit train, tune validation
04Test protocol đã chốt
Workflow minh họa · Các bước cần được điều chỉnh theo bài toán thực tế.

Ứng dụng & giới hạn

  • Phân loại ảnh nhiều frame hoặc nhiều ảnh cùng người.
  • Dự đoán nhu cầu theo thời gian.

Điểm mạnh

Tách vai trò dữ liệu giúp phân biệt tối ưu mô hình với đo chất lượng.

Giới hạn cần nhớ

Split sạch không bảo đảm dữ liệu đại diện môi trường mới; test có thể thiếu các trường hợp hiếm.

Thử trong một project nhỏ

LEARN BY DOING

Với bộ ảnh của 20 người, mỗi người 10 ảnh, thiết kế đánh giá cho người chưa từng gặp. Ghi group key và ít nhất ba assertion phát hiện leakage.

PYTHON · VÍ DỤ MINH HỌA
rows = [("person_a", 0), ("person_a", 1), ("person_b", 0), ("person_c", 1)]
train_groups = {"person_a"}
validation_groups = {"person_b"}
test_groups = {"person_c"}
assert train_groups.isdisjoint(validation_groups | test_groups)
assert validation_groups.isdisjoint(test_groups)
train = [r for r in rows if r[0] in train_groups]
test = [r for r in rows if r[0] in test_groups]
assert {r[0] for r in train}.isdisjoint(r[0] for r in test)
print(len(train), len(test))

Dữ liệu giả định, minh họa kiểm tra group separation; chưa phải bộ chia dữ liệu hoàn chỉnh.

Nguồn tham khảo

  1. scikit-learn — Cross-validation
  2. scikit-learn — Common pitfalls
  3. Goodfellow, Bengio & Courville — Machine Learning Basics

KEEP EXPLORING

Đọc tiếp để nối các ý tưởng.