{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Zajęcia 7: Bayes Classifier\n", "\n", "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`).\n", "\n", "Nie należy usuwać komórek z treścią zadań.\n", "\n", "Należy wyświetlać outputy przy pomocy `print`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Czym jest Bag of Words (BoW)?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Na czym polega \"naiwność\" klasyfikatora Bayesa?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Kroki do zaimplementowania klasyfikatora Bayesa:\n", "![alt text](bayes_steps.png \"Title\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "P(C|X) = P(C) * P(X|C)\n", "\n", "P(C)\n", "\n", "15 - tekstów\n", "
\n", "5 - spam\n", "
\n", "10 - niespam\n", "\n", "P(spam) = 5/15 = 1/3\n", "\n", "
\n", "P(X|C)\n", "\n", "Lubię borowiki i kurki. NIE SPAM\n", "
\n", "Lubię borowiki, borowiki i jeszcze raz borowiki. NIE SPAM\n", "
\n", "Poszedłem na zakupy. NIE SPAM\n", "\n", "P(borowiki|NIE SPAM) = 4 / 14\n", "\n", "P(zakupy|NIE SPAM) = 1 / 14\n", "\n", "P(X|NIE SPAM) = 4/14 * 1/14 * ...\n", "\n", "\n", "\n", "100 tekstów ze spamem, każde ma po 8 słów (i w pozostałych 99 nie występuje słowo borowiki)\n", "
\n", "1 SPAM\n", "
\n", "2 SPAM\n", "
\n", "...\n", "
\n", "Kup kup nasze nasze borowiki borowiki (TANIO TANIO)!!! SPAM\n", "
\n", "...\n", "
\n", "99 SPAM\n", "
\n", "100 SPAM\n", "\n", "P(borowiki|SPAM) = 2 / 800" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Inferencja (czyli dokonanie predykcji modelu) na zbiorze testowym\n", "\n", "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.\n", "\n", "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).\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Zadanie 1\n", "\n", "Zaimplementuj i wytrenuj klasyfikator Bayesa (bez korzystania z gotowych implementacji algorytmu) na danych treningowych z wyzwania:\n", "\n", "https://amueval.pl/challenge/Spamcl4Ssificationsms/\n", "\n", "A następnie wygeneruj predykcje dla zbioru testowego i dokonaj zgłoszenia na stronie wyzwania w zakładce \"Add Submission\".\n", "\n", "W pliku out.tsv muszą znajdować się wartości 0 lub 1 oddzielone nowymi liniami (bez nagłówka).\n", "\n", "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).\n", "\n", "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).\n", "\n", "#### Proszę podać nr indeksu przy wysyłaniu zadania na Teamsach" ] } ], "metadata": { "language_info": { "name": "python" } }, "nbformat": 4, "nbformat_minor": 2 }