Den Schwellenwert optimieren
Du hast gehört, dass der Standardwert 0,5 theoretisch die Accuracy maximiert, möchtest aber testen, was in der Praxis passiert. Also probierst du verschiedene Schwellenwerte aus, um zu sehen, welche Accuracy du erhältst, und bestimmst so den am besten performenden Schwellenwert. Dasselbe Experiment wiederholst du für den F1-Score. Ist 0,5 der optimale Schwellenwert? Ist der optimale Schwellenwert für Accuracy und F1-Score derselbe? Finde es heraus! Dir steht eine scores-Matrix zur Verfügung, die aus dem Scoring der Testdaten stammt. Die Ground-Truth-Labels für die Testdaten sind als y_test verfügbar. Außerdem sind zwei numpy-Funktionen vorab geladen: argmin() und argmax(), die jeweils den Index von Minimum und Maximum in einem Array ermitteln, sowie die Metriken accuracy_score() und f1_score().
Diese Übung ist Teil des Kurses
Machine-Learning-Workflows in Python entwerfen
Anleitung zur Übung
- Erstelle einen Bereich von Schwellenwerten, der 0,0; 0,25; 0,5; 0,75 und 1,0 enthält.
- Speichere per doppelter List Comprehension die Vorhersagen für jeden Schwellenwert in diesem Bereich. Denk daran: Labels aus einer Scores-Matrix mit einem Schwellenwert
threrhältst du mit[s[1] > thr for s in scores]. - Gehe diese Liste durch und berechne für jeden Schwellenwert die Accuracy. Wiederhole das für den F1-Score.
- Finde mit
argmin()oderargmax()den optimalen Schwellenwert für die Accuracy und für F1.
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
# 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)])