Mengoptimalkan ambang batas (threshold)
Anda pernah mendengar bahwa nilai default 0,5 secara teori memaksimalkan akurasi, tetapi Anda ingin menguji apa yang terjadi dalam praktik. Maka Anda mencoba sejumlah nilai ambang batas yang berbeda untuk melihat akurasi yang diperoleh, dan dengan demikian menentukan nilai ambang batas dengan kinerja terbaik. Anda mengulangi percobaan ini untuk skor F1. Apakah 0,5 merupakan ambang optimal? Apakah ambang optimal untuk akurasi dan untuk skor F1 sama? Silakan cari tahu! Anda memiliki matriks scores yang diperoleh dari penskoran data uji. Label ground truth untuk data uji juga tersedia sebagai y_test. Terakhir, dua fungsi numpy, argmin() dan argmax(), telah dimuat sebelumnya, yang masing-masing mengambil indeks nilai minimum dan maksimum dalam sebuah array, selain metrik accuracy_score() dan f1_score().
Latihan ini adalah bagian dari kursus
Merancang Alur Kerja Machine Learning di Python
Petunjuk latihan
- Buat rentang nilai ambang batas yang mencakup 0.0, 0.25, 0.5, 0.75, dan 1.0.
- Melalui list comprehension ganda, simpan prediksi untuk setiap nilai ambang dalam rentang di atas. Ingat bahwa memperoleh label dari matriks skor menggunakan ambang
thrdapat dilakukan dengan[s[1] > thr for s in scores]. - Jalankan daftar tersebut dan hitung akurasi untuk setiap ambang. Ulangi untuk skor F1.
- Dengan menggunakan
argmin()atauargmax(), temukan ambang optimal untuk akurasi, dan untuk F1.
Latihan interaktif praktis
Cobalah latihan ini dengan menyelesaikan kode contoh berikut.
# 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)])