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 se 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. |
Ú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. |