เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

การแลกเปลี่ยนระหว่าง 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'])

____
แก้ไขและรันโค้ด