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.