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
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()anp.max()proveď totéž pro práh rovný0.8. - Vypiš proměnnou
trade_offse 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'])
____