Zacznij terazZacznij za darmo

Kompromis między precyzją a czułością

W zadaniach klasyfikacji często pojawia się pojęcie kompromisu między precyzją a czułością (Precision-Recall trade-off). Skąd się bierze?

Zwykle dokument przypisuje się do klasy o najwyższym prawdopodobieństwie. Ale co, jeśli to maksymalne prawdopodobieństwo wynosi zaledwie 0.1? Czy warto przypisywać dokument do danej klasy przy zaledwie 10-procentowej pewności?

Odpowiedź zależy od konkretnego problemu. Można wprowadzić minimalny próg akceptacji klasyfikacji – zmieniając go, wartości precyzji i czułości przesuwają się w przeciwnych kierunkach.

Zmienne y_true i model model są już wczytane. Jeśli prawdopodobieństwo jest niższe od progu, dokument zostanie przypisany do DEFAULT_CLASS (przyjęto klasę 2).

To ćwiczenie jest częścią kursu

Rekurencyjne sieci neuronowe (RNN) do modelowania języka w Keras

Zobacz kurs

Instrukcje do ćwiczenia

  • Użyj metody .predict(), aby uzyskać prawdopodobieństwa dla każdej klasy, i zapisz je w zmiennej pred_probabilities.
  • Zaakceptuj maksymalne prawdopodobieństwo tylko wtedy, gdy jest ono większe lub równe 0.5, i zapisz wyniki w zmiennej y_pred_50.
  • Użyj funkcji np.argmax() i np.max(), aby wykonać to samo dla progu równego 0.8.
  • Wyświetl zmienną trade_off ze wszystkimi metrykami.

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

# 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'])

____
Edytuj i uruchom kod