Bốn độ đo phân loại nhị phân: accuracy, precision, recall, F1
Sau khi huấn luyện một mô hình phân loại nhị phân, việc đầu tiên cần làm là đo xem mô
Tiến độ của tôi ở bài này
Điểm và code bạn nộp được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: python-basics, numpy-axis-reduction.
Nội dung đề bài
Mô tả bài toán
Sau khi huấn luyện một mô hình phân loại nhị phân, việc đầu tiên cần làm là đo xem mô hình sai ở đâu. Chỉ nhìn accuracy rất dễ bị đánh lừa khi dữ liệu lệch lớp, nên người làm học máy luôn đọc kèm precision, recall và F1. Bài này luyện đúng một bước: tính bốn độ đo đó từ hai danh sách nhãn thật và nhãn dự đoán.
Yêu cầu
Viết hàm binary_metrics(y_true, y_pred) trả về dict có bốn khoá accuracy, precision, recall, f1. Lớp dương tính là nhãn 1, lớp âm tính là nhãn 0. Ký hiệu TP, FP, FN, TN lần lượt là số mẫu dương đúng, dương sai, âm sót và âm đúng; n là tổng số mẫu:
- accuracy = (TP + TN) / n
- precision = TP / (TP + FP), trả 0.0 nếu mẫu số bằng 0
- recall = TP / (TP + FN), trả 0.0 nếu mẫu số bằng 0
- f1 = 2 * precision * recall / (precision + recall), trả 0.0 nếu tổng bằng 0
Quy ước nộp bài
Nộp hàm binary_metrics trong solution.py. Hệ thống gọi hàm trực tiếp theo tên đối số, so giá trị trả về với sai số 1e-6; không đọc dữ liệu từ stdin và không in ra stdout.
Input
- y_true: danh sách nhãn thật, mỗi phần tử là 0 hoặc 1.
- y_pred: danh sách nhãn dự đoán, cùng độ dài với y_true.
Output
Một dict có đúng bốn khoá accuracy, precision, recall, f1; giá trị là số thực trong đoạn [0, 1].
Ràng buộc
- Số mẫu từ 1 đến 20, hai danh sách luôn cùng độ dài.
- Mẫu số bằng 0 thì độ đo tương ứng bằng 0.0, không được để lỗi chia.
- f1 là trung bình điều hoà của precision và recall, không phải trung bình cộng.
- Không dùng vòng lặp lồng nhau; cộng theo mặt nạ boolean của NumPy.
Ví dụ 1
Input
binary_metrics(y_true=[1, 0, 1], y_pred=[1, 1, 1])
Output
{"accuracy": 0.6666666666666666, "precision": 0.6666666666666666, "recall": 1.0, "f1": 0.8}
Ví dụ 2
Input
binary_metrics(y_true=[0, 0, 0, 0], y_pred=[0, 0, 0, 0])
Output
{"accuracy": 1.0, "precision": 0.0, "recall": 0.0, "f1": 0.0}
Giải thích
Với y_true = [1, 0, 1] và y_pred = [1, 1, 1] thì TP = 2, FP = 1, FN = 0, TN = 0. Do đó accuracy = 2/3, precision = 2/3, recall = 1.0 và f1 = 2 * (2/3) * 1 / (2/3 + 1) = 0.8.
Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
