Đánh đổi giữa Precision và Recall
Khi làm việc với các bài toán phân loại, cụm từ Precision-Recall trade-off xuất hiện khá thường xuyên. Nó xuất phát từ đâu?
Thông thường, ta chọn lớp có xác suất cao nhất để gán cho tài liệu. Nhưng nếu xác suất lớn nhất chỉ bằng 0.1 thì sao? Bạn có nên coi tài liệu đó thuộc lớp này khi chỉ có 10% xác suất không?
Câu trả lời phụ thuộc vào bài toán cụ thể. Ta có thể đặt một ngưỡng tối thiểu để chấp nhận phân loại; khi thay đổi ngưỡng, các giá trị precision và recall sẽ dịch chuyển theo hướng ngược nhau.
Các biến y_true và mô hình model đã được nạp. Ngoài ra, nếu xác suất thấp hơn ngưỡng, tài liệu sẽ được gán vào DEFAULT_CLASS (được chọn là lớp 2).
Bài tập này là một phần của khóa học
Mạng nơ-ron hồi quy (RNN) cho Mô hình ngôn ngữ với Keras
Hướng dẫn bài tập
- Dùng phương thức
.predict()để lấy xác suất cho từng lớp và lưu vào biếnpred_probabilities. - Chấp nhận xác suất lớn nhất chỉ khi nó lớn hơn hoặc bằng
0.5và lưu kết quả vào biếny_pred_50. - Dùng các hàm
np.argmax()vànp.max()để làm tương tự với ngưỡng bằng0.8. - In biến
trade_offvới toàn bộ các chỉ số.
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.
# Get probabilities for each class
pred_probabilities = model.____(X_test)
# Thresholds at 0.5 and 0.8
y_pred_50 = [np.argmax(x) if np.max(x) >= ____ else DEFAULT_CLASS for x in pred_probabilities]
y_pred_80 = [np.____(x) if np.____(x) >= 0.8 else DEFAULT_CLASS for x in pred_probabilities]
trade_off = pd.DataFrame({
'Precision_50': precision_score(y_true, y_pred_50, average=None),
'Precision_80': precision_score(y_true, y_pred_80, average=None),
'Recall_50': recall_score(y_true, y_pred_50, average=None),
'Recall_80': recall_score(y_true, y_pred_80, average=None)},
index=['Class 1', 'Class 2', 'Class 3'])
____