python-275Đọc toàn bộ đề miễn phí

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ô

PythonCơ bản15 phút

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ủ đề

machine-learningclassification-metricsnumpyentry-ramp

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.

3 cấp độ gợi ýMở dần khi bạn thật sự cần hỗ trợ.
Phân tích lời giảiGiải thích hướng tư duy và thuật toán.
Code tham khảoDùng để đối chiếu sau khi tự làm.

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.

Nhóm Zalo