การปรับค่า threshold ให้เหมาะสมที่สุด
ทราบมาว่าค่า threshold เริ่มต้นที่ 0.5 จะให้ accuracy สูงสุดในทางทฤษฎี แต่ต้องการทดสอบว่าในทางปฏิบัติเป็นอย่างไร จึงลองใช้ค่า threshold หลายค่าเพื่อดูว่าได้ accuracy เท่าไร แล้วหาค่า threshold ที่ให้ผลดีที่สุด จากนั้นทำการทดลองซ้ำสำหรับคะแนน F1 ด้วย ค่า 0.5 เป็น threshold ที่เหมาะสมที่สุดหรือไม่ และค่า threshold ที่ดีที่สุดสำหรับ accuracy กับ F1 score เหมือนกันหรือเปล่า ลองหาคำตอบกันเลย! มีเมทริกซ์ scores ที่ได้จากการให้คะแนนข้อมูลทดสอบพร้อมใช้งาน รวมถึง ground truth labels ของข้อมูลทดสอบที่เก็บอยู่ใน y_test นอกจากนี้ยังมีฟังก์ชัน numpy สองตัวที่โหลดไว้ให้แล้ว ได้แก่ argmin() และ argmax() ซึ่งใช้ดึงค่า index ของค่าต่ำสุดและสูงสุดในอาร์เรย์ตามลำดับ พร้อมด้วย metrics accuracy_score() และ f1_score()
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การออกแบบ Machine Learning Workflows ด้วย Python
คำแนะนำการฝึกหัด
- สร้างช่วงของค่า threshold ที่ประกอบด้วย 0.0, 0.25, 0.5, 0.75 และ 1.0
- ใช้ double list comprehension เพื่อเก็บผลการพยากรณ์สำหรับแต่ละค่า threshold ในช่วงดังกล่าว โดยการแปลงเมทริกซ์
scoresเป็น labels ด้วย thresholdthrทำได้โดยใช้[s[1] > thr for s in scores] - วนผ่านลิสต์นั้นและคำนวณ accuracy สำหรับแต่ละค่า threshold แล้วทำซ้ำสำหรับคะแนน F1
- ใช้
argmin()หรือargmax()เพื่อหาค่า threshold ที่เหมาะสมที่สุดสำหรับ accuracy และ F1
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Create a range of equally spaced threshold values
t_range = ____
# Store the predicted labels for each value of the threshold
preds = [[____ > thr for s in scores] for ____ in ____]
# Compute the accuracy for each threshold
accuracies = [____(____, ____) for p in preds]
# Compute the F1 score for each threshold
f1_scores = [____(____, ____) for p in preds]
# Report the optimal threshold for accuracy, and for F1
print(t_range[____(accuracies)], t_range[____(f1_scores)])