pjn-2024-cw/07_bayes_classifier.ipynb
Ryszard Staruch ff52845661 Add example
2024-11-27 16:37:19 +01:00

3.9 KiB

Zajęcia 7: Bayes Classifier

Wszystkie zadania ćwiczeniowe należy rozwiązywać w języku Python w kopii Jupyter Notebook'a dla danych zajęć w wyznaczonych miejscach (komórki z komentarzem # Solution).

Nie należy usuwać komórek z treścią zadań.

Należy wyświetlać outputy przy pomocy print

Czym jest Bag of Words (BoW)?

Na czym polega "naiwność" klasyfikatora Bayesa?

Kroki do zaimplementowania klasyfikatora Bayesa:

alt text

P(C|X) = P(C) * P(X|C)

P(C)

15 - tekstów
5 - spam
10 - niespam

P(spam) = 5/15 = 1/3


P(X|C)

Lubię borowiki i kurki. NIE SPAM
Lubię borowiki, borowiki i jeszcze raz borowiki. NIE SPAM
Poszedłem na zakupy. NIE SPAM

P(borowiki|NIE SPAM) = 4 / 14

P(zakupy|NIE SPAM) = 1 / 14

P(X|NIE SPAM) = 4/14 * 1/14 * ...

100 tekstów ze spamem, każde ma po 8 słów (i w pozostałych 99 nie występuje słowo borowiki)
1 SPAM
2 SPAM
...
Kup kup nasze nasze borowiki borowiki (TANIO TANIO)!!! SPAM
...
99 SPAM
100 SPAM

P(borowiki|SPAM) = 2 / 800

Inferencja (czyli dokonanie predykcji modelu) na zbiorze testowym

Dla zdania ze zbioru testowego dla każdego słowa, które znajduje się w słowniku, obliczamy wartości P(xi|C), gdzie wartość z licznika oraz mianiownika bazuje na danych ze zbioru treningowego.

Czyli np. dla zdania "Kup pyszne borowiki" jeżeli tylko słowa "kup" oraz "pyszne" występują w słowniku obliczamy P(X|C) = P(kup|C) * P(borowiki|C).

Zadanie 1

Zaimplementuj i wytrenuj klasyfikator Bayesa (bez korzystania z gotowych implementacji algorytmu) na danych treningowych z wyzwania:

https://amueval.pl/challenge/Spamcl4Ssificationsms/

A następnie wygeneruj predykcje dla zbioru testowego i dokonaj zgłoszenia na stronie wyzwania w zakładce "Add Submission".

W pliku out.tsv muszą znajdować się wartości 0 lub 1 oddzielone nowymi liniami (bez nagłówka).

Można spróbować z różnymi wartościami alpha oraz liczbą słów w słowniku (czyli w kroku P(X|C) możemy uwzględniać tylko np. 500 najczęściej występujących słów - nie gwarantuję że to pomoże).

Proszę pamiętać o redukcji obliczeń (np. liczbę słów w danej klasie można zapisać w zmiennej, a nie robić to za każdym razem).

Proszę podać nr indeksu przy wysyłaniu zadania na Teamsach