Uczenie Maszynowe – klasyfikator Bayes'a
Ćwiczenie | Klasyfikator Bayes'a |
Cel | Pokazanie prostej klasyfikacji opartej na rachunku prawdopodobieństw |
Zagadnienia |
Prawdopodobieństwo warunkowe, niezależność zdarzeń, klasyfikacja dokumentów tekstowych |
Narzędzia |
Weka (jest zainstalowana lokalnie), python notebook i scipy, Bow/Rainbow |
Zbiory danych i materiały |
Z pakietu WEKA, oraz teksty z grup dyskusyjnych (Rainbow)
Podstawy Weki Opisy NKB: Stanford (prezentacja i opis), wikipedia, książka Podstawy Rainbow Wykład o NKB |
Video | YouTube: klasyfikator Bayes'a, Weka |
Zadanie 1. Zasada działania
- Przypomnij sobie zasadę działania klasyfikatora Bayes'a. Czym się od niego różni naiwny klasyfikator Bayes'a?
- Przeczytaj zasady działania zwracając uwagę na sposób wykorzystania klasyfikatora do klasyfikacji dokumentów tekstowych.
- Czy atrybuty numeryczne warto traktować tak, jak nominalne?
- Jak poradzić sobie z mnożeniem wielu małych liczb i ryzykiem niedomiaru (underflow)?
Zadanie 2. Porównania
- Zapoznaj się ze środowiskiem WEKA oraz sposobem obliczania miar FP rate, recall, precision.
- Przeanalizuj działanie NaiveBayesSimple dla zbiorów Weather i Iris.
- Korzystając z pakietu WEKA, porównaj klasyfikatory J4.8 i NaiveBayes pod kątem uzyskiwanych trafności klasyfikacji oraz czasu działania. Do porównania wybierz któryś z dostępnych plików danych.
- Sprawdź opcję "Visualize classifier errors" (prawy klik na "Results list"). Jakie przypadki są trudne do klasyfikowania dla poszczególnych klasyfikatorów?
Zadanie 3. Python notebook i scipy
Spróbuj rozwiązać samodzielnie zadania i udzielić odpowiedzi na pytania z tego notebooka. Podpowiedzi i odpowiedzi znajdziesz w tym notebooku. Oba te notebooki korzystają z tego pliku z pomocniczymi funkcjami.Zadanie 4. Rainbow (exe)
- Zapoznaj się z prezentacją oraz opisem działania pakietu Rainbow (opis autora programu tu).
- Rozgrzewka:
- rozpakuj program rainbow
- otwórz linię poleceń w katalogu programu
- ustaw set HOME=.
- załóż podkatalog "dane" i rozpakuj tam zipa z zawartością katalogów C, CPP, DOC, H, RC
- załóż podkatalog "model"
- rainbow -d ~/model --index dane/*
- rainbow -d ~/model --print-word-infogain 5
- rainbow -d ~/model -T 5 --print-word-probabilities=CPP
- rainbow -d ~/model -T 5 --print-word-probabilities=H
- rainbow -d ~/model --print-word-counts=undef
- rainbow -d ~/model --print-word-counts=set
- rainbow -d ~/model --query=jakis_plik_testujacy (czy model poprawnie klasyfikuje jakiś współczesny plik cpp? dlaczego?)
- rainbow -d ~/model --test-set=0.5 --test=1 (skrypt w perlu formatuje ładnie wyniki)
- Przeprowadź przykładowy eksperyment klasyfikacji tekstów – np. artykułów z list dyskusyjnych.