Začněte nyníZačněte zdarma

Kompromis mezi přesností a úplností

Při klasifikačních úlohách se často setkáš s pojmem kompromis mezi přesností a úplností (Precision-Recall trade-off). Odkud vlastně pochází?

Obvykle se dokument přiřadí do třídy s nejvyšší pravděpodobností. Ale co když je tato maximální pravděpodobnost rovna 0.1? Má smysl považovat dokument za příslušný do dané třídy jen s 10% jistotou?

Odpověď závisí na konkrétním problému. Je možné nastavit minimální práh, pod nějž klasifikaci nepřijmeme – a změnou tohoto prahu se hodnoty přesnosti a úplnosti pohybují v opačných směrech.

Proměnná y_true a model model jsou načteny. Pokud je pravděpodobnost nižší než zvolený práh, dokument bude přiřazen do DEFAULT_CLASS (nastavené jako třída 2).

Toto cvičení je součástí kurzu

Rekurentní neuronové sítě (RNN) pro jazykové modelování s Keras

Zobrazit kurz

Pokyny k cvičení

  • Použij metodu .predict() k získání pravděpodobností pro každou třídu a ulož je do proměnné pred_probabilities.
  • Přijmi maximální pravděpodobnost pouze tehdy, je-li větší nebo rovna 0.5, a výsledky ulož do proměnné y_pred_50.
  • Pomocí funkcí np.argmax() a np.max() proveď totéž pro práh rovný 0.8.
  • Vypiš proměnnou trade_off se všemi metrikami.

Interaktivní cvičení na vyzkoušení si v praxi

Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.

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

____
Upravit a spustit kód