थ्रेशोल्ड को ऑप्टिमाइज़ करना
आपने सुना है कि सिद्दांततः 0.5 का डिफ़ॉल्ट मान accuracy को अधिकतम करता है, लेकिन आप देखना चाहते हैं कि व्यवहार में क्या होता है. इसलिए आप अलग-अलग थ्रेशोल्ड मान आज़माते हैं, देखते हैं कि accuracy क्या मिलती है, और इस तरह सबसे अच्छा थ्रेशोल्ड तय करते हैं. आप यही प्रयोग F1 स्कोर के लिए भी दोहराते हैं. क्या 0.5 वास्तव में optimal थ्रेशोल्ड है? क्या accuracy और F1 स्कोर के लिए optimal थ्रेशोल्ड एक ही है? आइए पता लगाइए! आपके पास scores मैट्रिक्स उपलब्ध है, जो test डेटा को स्कोर करके मिला है. Test डेटा के ground truth लेबल y_test के रूप में मौजूद हैं. अंत में, दो numpy फंक्शन argmin() और argmax() पहले से लोड हैं, जो क्रमशः किसी array में न्यूनतम और अधिकतम मान के इंडेक्स लौटाते हैं, साथ ही metrics accuracy_score() और f1_score() भी उपलब्ध हैं.
यह अभ्यास पाठ्यक्रम का हिस्सा है
Python में मशीन लर्निंग वर्कफ़्लो डिज़ाइन करना
अभ्यास निर्देश
- ऐसे थ्रेशोल्ड मानों की एक रेंज बनाएँ जिसमें 0.0, 0.25, 0.5, 0.75 और 1.0 शामिल हों.
- डबल list comprehension के ज़रिए, ऊपर दी गई रेंज के हर थ्रेशोल्ड के लिए प्रेडिक्शंस स्टोर करें. याद रखें, किसी scores मैट्रिक्स पर थ्रेशोल्ड
thrलगाकर लेबल पाने के लिए[s[1] > thr for s in scores]का उपयोग कर सकते हैं. - उस सूची पर चलकर हर थ्रेशोल्ड के लिए accuracy निकालें. यही काम F1 स्कोर के लिए दोहराएँ.
argmin()याargmax()में से किसी एक का उपयोग करके accuracy के लिए और F1 के लिए optimal थ्रेशोल्ड खोजें.
इंटरैक्टिव व्यावहारिक अभ्यास
इस अभ्यास को इस नमूना कोड को पूरा करके आज़माएँ।
# 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)])