การแลกเปลี่ยนระหว่าง Precision และ Recall
ในงานจำแนกประเภท มักพบคำว่า Precision-Recall trade-off อยู่เสมอ แล้วมันมาจากไหน?
โดยทั่วไป คลาสที่มีความน่าจะเป็นสูงสุดจะถูกเลือกเป็นคำทำนายสำหรับเอกสารนั้น แต่ถ้าความน่าจะเป็นสูงสุดเท่ากับ 0.1 ล่ะ? ควรจัดเอกสารนั้นเข้าคลาสนี้ทั้งที่มีความน่าจะเป็นเพียง 10% หรือไม่?
คำตอบขึ้นอยู่กับปัญหาที่เผชิญอยู่ สามารถกำหนดค่าเกณฑ์ขั้นต่ำสำหรับการยอมรับผลการจำแนกได้ และเมื่อปรับค่าเกณฑ์นี้ ค่า precision และ recall จะเปลี่ยนแปลงในทิศทางตรงกันข้าม
ตัวแปร y_true และโมเดล model ถูกโหลดไว้แล้ว นอกจากนี้ หากความน่าจะเป็นต่ำกว่าค่าเกณฑ์ เอกสารจะถูกกำหนดให้เป็น DEFAULT_CLASS (ซึ่งกำหนดไว้เป็นคลาส 2)
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Recurrent Neural Networks (RNNs) สำหรับ Language Modeling ด้วย Keras
คำแนะนำการฝึกหัด
- ใช้เมธอด
.predict()เพื่อดึงความน่าจะเป็นของแต่ละคลาส แล้วเก็บผลลัพธ์ไว้ในตัวแปรpred_probabilities - ยอมรับความน่าจะเป็นสูงสุดเฉพาะเมื่อมีค่ามากกว่าหรือเท่ากับ
0.5แล้วเก็บผลลัพธ์ไว้ในตัวแปรy_pred_50 - ใช้ฟังก์ชัน
np.argmax()และnp.max()เพื่อดำเนินการเดียวกันสำหรับค่าเกณฑ์ที่เท่ากับ0.8 - แสดงผลตัวแปร
trade_offพร้อมค่าเมตริกทั้งหมด
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# 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'])
____