Optymalizacja progu klasyfikacji
Słyszałeś, że domyślna wartość progu 0,5 teoretycznie maksymalizuje dokładność – ale chcesz sprawdzić, jak to wygląda w praktyce. Przetestujesz kilka różnych wartości progu, aby zobaczyć, jaką dokładność uzyskasz, i wskazać najlepiej działający próg. Powtórzysz ten eksperyment dla miary F1. Czy 0,5 to optymalny próg? Czy optymalny próg dla dokładności i dla F1 jest taki sam? Czas to sprawdzić! Masz dostępną macierz scores uzyskaną przez ocenę danych testowych. Prawdziwe etykiety danych testowych są dostępne jako y_test. Dodatkowo załadowane są dwie funkcje numpy: argmin() i argmax(), które zwracają indeks odpowiednio minimalnej i maksymalnej wartości w tablicy, a także metryki accuracy_score() i f1_score().
To ćwiczenie jest częścią kursu
Projektowanie przepływów pracy uczenia maszynowego w Pythonie
Instrukcje do ćwiczenia
- Utwórz zakres wartości progu zawierający: 0,0; 0,25; 0,5; 0,75 i 1,0.
- Za pomocą podwójnego list comprehension zapisz przewidywania dla każdej wartości progu z powyższego zakresu. Pamiętaj, że etykiety z macierzy wyników przy użyciu progu
thrmożna uzyskać wyrażeniem[s[1] > thr for s in scores]. - Przejdź przez tę listę i oblicz dokładność dla każdego progu. Powtórz to samo dla miary F1.
- Korzystając z
argmin()lubargmax(), wyznacz optymalny próg dla dokładności oraz dla F1.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# 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)])