====== Spam filtr ====== Filtrování spamu je velmi praktická úloha s velkým reálným dopadem. Je to představitel klasifikačního problému, s nimiž se setkáváme ve strojovém učení, a lze na ní ukázat jejich typické rysy. Vyžaduje práci s nestrukturovanými daty (textem). Lze ji řešit velkou škálou metod - od jednoduchých až po velmi propracované. * [[.uvod|Úvod do problému filtrování spamu]]. * [[.hodnoceni|Hodnocené části úlohy a jejich bodování]]. * [[.specifikace|Specifikace]], jichž se **musíte** držet. * Doporučené kroky ([[.krok1|1]], [[.krok2|2]], [[.krok3|3]], [[.krok4|4]], [[.krok5|5]], [[.krok6|6]]), jichž se držet nemusíte, pokud nejsou součástí výše uvedených specifikací. * [[.data|Data]] potřebná k řešení úlohy. ===== Přínos úlohy pro studenty ===== * Studenti si procvičí **objektové programování v Pythonu** a práci s **nestrukturovanými daty** (textem). * Studenti si vyzkouší **řešení složitější úlohy**, která vyžaduje spolupráci několika tříd. * Studenti se seznámí s prvky automatického testování softwaru - s **unit testy**. * Studenti se na praktické úloze seznámí se **základními principy strojového učení** (jak ohodnotit kvallitu filtru, trénovací/testovací data, ...). * Studenti zažijí **pocit, že zvládnou vyřešit netriviální úlohu**. * V závěrečném **srovnání** studenti zjistí, zda lépe fungují **člověkem navržené filtry** nebo **filtry schopné sami se učit z dat**. ===== Cíle úlohy ===== Vaším prvořadým úkolem v této úloze nebude vytvoření co nejkvalitnějšího spam filtru, jak by se mohlo zdát. Metody, které by vám v tom mohly pomoci, ještě neznáte a dozvíte se o nich v dalším průběhu studia. Vaším úkolem je především * pochopit, oč v této úloze jde, úlohu analyzovat a dekomponovat, * vytvořit si sadu funkcí či tříd v jazyce Python, které vám umožní snadno použít spam filtr (až nějaký budete mít) a vyhodnotit jeho kvalitu, příp. porovnat dva a více spam filtrů, a * vytvořit jednoduchý (třeba i velmi primitivní) spam filtr, který bude možno použít v rámci vytvořeného "frameworku".