Vytvořte sadu tříd a funkcí potřebných k posouzení kvality filtru.
Testy ke kroku 3:
Prostudujte si:
Na kus papíru napište:
Úkol:
confmat.py
vytvořte třídu BinaryConfusionMatrix
.
pos_tag
a neg_tag
, tedy jaké hodnoty se mají považovat za pozitivní a jaké za negativní (bude tedy použitelná obecně, nikoli jen pro kódy 'SPAM' a 'OK').
pos_tag=“SPAM”
a neg_tag=“OK”
as_dict()
, která vrátí matici záměn ve formě slovníku s položkami tp, tn, fp, fn
.
update(truth, prediction)
, která zvýší hodnotu příslušného čítače (TP, TN, FP, nebo FN) o 1 na základě porovnání hodnot proměnných truth
a prediction
s hodnotami pos_tag
a neg_tag
. Bude-li hodnota některého z parametrů truth
nebo prediction
různá od pos_tag
i neg_tag
, metoda vyhodí výjimku ValueError
.
compute_from_dicts(truth_dict, pred_dict)
, která napočítá statistiky TP, TN, FP a FN ze dvou slovníků: v prvním bude správná klasifikace emailů, ve druhém klasifikace emailů predikovaná filtrem.
K čemu nám to bude:
BinaryConfusionMatrix
bude tvořit základ pro hodnocení úspěšnosti filtru.
>>> cm1 = BinaryConfusionMatrix(pos_tag=True, neg_tag=False) >>> cm1.as_dict() {'tp': 0, 'tn': 0, 'fp': 0, 'fn': 0} >>> cm1.update(True, True) >>> cm1.as_dict() {'tp': 1, 'tn': 0, 'fp': 0, 'fn': 0}
>>> truth_dict = {'em1': 'SPAM', 'em2': 'SPAM', 'em3': 'OK', 'em4':'OK'} >>> pred_dict = {'em1': 'SPAM', 'em2': 'OK', 'em3': 'OK', 'em4':'SPAM'} >>> cm2 = BinaryConfusionMatrix(pos_tag='SPAM', neg_tag='OK') >>> cm2.compute_from_dicts(truth_dict, pred_dict) >>> cm2.as_dict() {'tp': 1, 'tn': 1, 'fp': 1, 'fn': 1}
Třída tedy bude mit alespoň 3 veřejné metody: as_dict()
, update()
a compute_from_dicts()
.
as_dict() | Vrátí matici záměn ve formě slovníku. |
---|---|
Vstup: | Nic. |
Výstup: | Slovník obsahující klíče tp, tn, fp, fn a jejich hodnoty. |
Efekty: | Nic. |
update(truth, pred) | Zvyš hodnotu jednoho ze 4 čítačů podle hodnot truth a pred . |
---|---|
Vstup: | Skutečná a predikovaná třída. |
Výstup: | Nic. |
Efekty: | Zvýšení hodnoty jednoho z čítačů TP, TN, FP, FN, nebo výjimka ValueError . |
compute_from_dicts(truth_dict, pred_dict) | Napočítej celou matici záměn na základě hodnot uložených ve slovnících. |
---|---|
Vstup: | Slovníky obsahující skutečné a predikované třídy pro množinu objektů (emailů). |
Výstup: | Nic. |
Efekty: | Prvky matice se nastaví na počty pozorovaných TP, TN, FP, FN. |
Pozn.: Můžete očekávat, že slovníky budou mít stejnou množinu klíčů. Rozmyslete si ale, jak byste chtěli, aby se metoda chovala v případě, že bychom jí předali slovníky s různými množinami klíčů.
Úkol:
quality_score(tp, tn, fp, fn)
v modulu quality.py
.
quality_score(tp, tn, fp, fn) Vypočti skóre kvality pro danou matici záměn. |
|
---|---|
Vstupy | Čtveřice hodnot TP, TN, FP, FN. |
Výstupy | Číslo mezi 0 a 1 udávající naši míru kvality predikce. |
Náseldující specifikace pro funkci compute_quality_for_corpus()
jsou povinné a musíte jim vyhovět!
Úkol:
quality.py
vytvořte funkci compute_quality_for_corpus(corpus_dir)
, která ohodnotí kvalitu predikcí (filtru) na základě údajů v souborech !truth.txt
a !prediction.txt
v zadaném korpusu.
read_classification_from_file()
.
compute_from_dicts()
třídy BinaryConfusionMatrix
.
quality_score()
.
K čemu nám to bude:
pos_tag=“SPAM”
a neg_tag=“OK”
, které odpovídá finálnímu spam filtru.
compute_quality_for_corpus(corpus_dir) | Vypočti kvalitu predikcí v korpusu. |
---|---|
Vstupy | Adresář ohodnoceného korpusu (obsahující soubory !truth.txt a !prediction.txt ). |
Výstupy | Číslo mezi 0 a 1 udávající naši míru kvality predikce. |