Avvägning mellan precision och återkallning
Vid klassificeringsuppgifter stöter man ofta på begreppet avvägning mellan precision och återkallning (Precision-Recall trade-off). Var kommer det ifrån?
Vanligtvis tilldelas dokumentet den klass som har högst sannolikhet. Men vad händer om den högsta sannolikheten är 0.1? Bör du anse att dokumentet tillhör den klassen med bara 10 % sannolikhet?
Svaret beror på det specifika problemet. Det går att lägga till ett minimitröskel för att acceptera klassificeringen, och när tröskelvärdet ändras rör sig precision och återkallning i motsatta riktningar.
Variablerna y_true och modellen model är inlästa. Om sannolikheten är lägre än tröskelvärdet tilldelas dokumentet DEFAULT_CLASS (satt till klass 2).
Den här övningen är en del av kursen
Återkommande neurala nätverk (RNN) för språkmodellering med Keras
Övningsinstruktioner
- Använd
.predict()-metoden för att hämta sannolikheterna för varje klass och lagra dem i variabelnpred_probabilities. - Acceptera den högsta sannolikheten endast om den är större än eller lika med
0.5och lagra resultaten i variabelny_pred_50. - Använd funktionerna
np.argmax()ochnp.max()för att göra samma sak med ett tröskelvärde på0.8. - Skriv ut variabeln
trade_offmed alla mätvärden.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
# Get probabilities for each class
pred_probabilities = model.____(X_test)
# Thresholds at 0.5 and 0.8
y_pred_50 = [np.argmax(x) if np.max(x) >= ____ else DEFAULT_CLASS for x in pred_probabilities]
y_pred_80 = [np.____(x) if np.____(x) >= 0.8 else DEFAULT_CLASS for x in pred_probabilities]
trade_off = pd.DataFrame({
'Precision_50': precision_score(y_true, y_pred_50, average=None),
'Precision_80': precision_score(y_true, y_pred_80, average=None),
'Recall_50': recall_score(y_true, y_pred_50, average=None),
'Recall_80': recall_score(y_true, y_pred_80, average=None)},
index=['Class 1', 'Class 2', 'Class 3'])
____