Celem ćwiczenia jest zapoznanie się z zagadnieniem klasyfikacji, automatycznym uczeniem na podstawie serii uczącej, posługiwaniem się narzędziem do analizy danych, oraz metodą Naiwnego Klasyfikatora Bayesowskiego (NBC). Implementację NBC można znaleźć w pakietach służących do drążenia danych takich jak WEKA albo RapidMiner. Można również wykonać to ćwiczenie za pomocą innego narzędzia do statystycznej analizy albo drążenia danych zawierającego NBC, np. pakietu statystycznego Matlaba.

Zadanie składa się z dwóch etapów. Celem pierwszego (przygotowanie) jest opanowanie narzędzia z wykorzystaniem prostych modelowych zbiorów danych, łatwo dostępnych w Internecie i opisanych w wielu podręcznikach. Drugi etap (właściwy) polega na stworzeniu lub znalezieniu własnego zestawu danych i przeprowadzeniu ich analizy. W raporcie z wykonania zadania proszę opisać tylko etap drugi.

Etap 1 (przygotowanie)

Dla przeprowadzenia eksperymentów z naiwnym klasyfikatorem bayesowskim w oprogramowaniu Rapid Miner warto zapoznać się z 6 częściowym samouczkiem na stronie producenta: http://rapid-i.com/content/view/189/212/lang,en/#video_tutorials

Tu zostaną opisane eksperymenty na przykładzie programu WEKA pochodzącego z University of Waikato w Nowej Zelandii. Program jest napisany w Javie i można go ściągnąć z Internetu oraz uruchomić pod maszyną wirtualną Javy. Po odpaleniu programu z ikonki lub wiersza poleceń pojawia się okienko interfejsu Weka GUI Chooser, z którego należy wybrać Explorer. Powoduje to otwarcie oddzielnego okna Weka Explorer, natomiast GUI Chooser można zamknąć.

Zbiór danych „pogodowych”

Zbiór danych do podstawowych ćwiczeń opisuje losowo wybrane sytuacje, z czterema parametrami opisującymi pogodę, i zaznaczeniem, czy grano w tych warunkach czy nie. Zbiór składa się zaledwie z 14 próbek i występuje pod nazwą „golf” lub „weather”.

Pierwszym krokiem jest wczytanie danych. W zakładce Preprocess należy wybrać Open file, co pozwala wczytać plik danych z rozszerzeniem .arff. Poza zbiorem próbek zapisanych w tekstowym formacie CSV zawiera on nagłówek programu WEKA deklarujący nazwy i typy poszczególnych parametrów (mogą one być liczbowe lub symboliczne). W razie potrzeby nagłówek taki można spreparować samodzielnie dla czystego zbioru danych CSV. W pakiecie instalacyjnym WEKA znajduje się folder data, a w nim szereg przykładowych plików danych, pomiędzy nimi również plik weather.arff.

Po załadowaniu zbioru WEKA wyświetla jego podstawowe charakterystyki: liczbę atrybutów i próbek, informację o brakujących wartościach, a także histogramy wartości poszczególnych atrybutów. WEKA domyślnie zakłada, że ostatni atrybut określa klasę próbki. Jeśli rzeczywistą klasą próbki jest inny atrybut, można wybrać go w polu wyboru Class. Uwaga: WEKA resetuje ten wybór często w trakcie pracy i trzeba go ustawiać od nowa. Wygodniej jest przetworzyć plik wejściowy tak, aby atrybut klasy był ostatni.

Warto zwrócić uwagę na poszczególne atrybuty występujące w zbiorze i zakresy ich wartości. Jeśli są wśród nich atrybuty liczbowe to WEKA dokonuje ich dyskretyzacji (podziału na przedziały). Warto przyjrzeć się dokładniej w jaki sposób ta dyskretyzacja została dokonana.

W celu klasyfikacji należy wybrać zakładkę Classify. Naiwny klasyfikator bayesowski można wybrać klikając Choose i następnie wybierając NaiveBayes w grupie bayes.

W celu rozpoczęcia eksperymentu uczenia i testowania klasyfikatora należy wybrać jedną z opcji testowania. Na początku zawsze wybierz Use training set. Następnie naciśnij Start. Po automatycznym wyuczeniu i przetestowaniu klasyfikatora, w okienku Classifier output po prawej pojawiają się wyniki klasyfikacji. Najważniejsze wyniki zebrane są na końcu w grupie Summary. Należy zwrócić uwagę co najmniej na procentową poprawność klasyfikacji (Correctly Classified Instances) i macierz pomyłek (Confusion Matrix).

W przypadku zbioru weather typowo otrzymujemy poprawność klasyfikacji na zbiorze uczącym 93\%. Wartość ta wyznacza pułap zdolności uczenia się klasyfikacji automatycznej na danym zbiorze (przy danych ustawieniach metody i parametrów uczenia się). Po wyborze testowania walidacji krzyżowej (zbiór jest dzielony szereg razy na oddzielne podzbiory: uczący i testowy), poprawność spada do 64\%. Ta wartość określa orientacyjną dokładność jakiej można spodziewać się przy testowaniu na zbiorze testowym oddzielonym od uczącego. Dalsza analiza powinna polegać na poszukiwaniu źródeł powstawania błędów klasyfikacji i metod poprawienia tego wyniku.

Zwrócmy jednak uwagę, że przy zaledwie dwóch klasach, błąd wyniósł prawie 36\%, co daje skuteczność klasyfikacji niewiele tylko lepszą od losowej. Wynika to z faktu, że weather.arff jest zbiorem ilustracyjnym, nie będącym prawdziwą statystyką, i zbyt małym do jakichkolwiek eksperymentów automatycznego uczenia się. Poza wstępnym załadowaniem i wypróbowaniem podstawowych opcji programu nie warto kontynuować eksperymentów na tym zbiorze.

Zbiór irysów

Również ilustracyjnym, ale o znacznie lepszych własnościach jest inny zbiór danych, o nazwie iris.arff. Zawiera on 150 próbek opisujących kwiaty z trzech gatunków irysów. Próbki są opisane czterema parametrami: sepal length/width (długość i szerokość liścia), oraz petal length/width (długość i szerokość płatka), oraz nazwą gatunku.

Po załadowaniu tego zbioru możemy zauważyć, że histogramy poszczególnych atrybutów układają się w typowe rozkłady gaussowskie. Można również zauważyć, że pierwszy gatunek (iris setosa) wyróżnia się od pozostałych (patrz np. petallength). Pozwala to mieć nadzieję na dobrą możliwość wyuczenia klasyfikatora.

Po przejściu do zakładki Classify, w oknie nad przyciskiem Start można wybrać atrybut, którego wartość będzie przewidywana przez klasyfikator (domyślnie ostatni). Próba klasyfikacji tych danych na zbiorze uczącym daje typowo poprawność klasyfikacji 96\%. Jednocześnie taka sama jest poprawność walidacji krzyżowej, co potwierdza dość dobrą wyuczalność klasyfikacji na tym zbiorze.

W zakładce Classify można wybrać jedną z 4 opcji testowania, kolejno: na zbiorze uczącym, na zewnętrznym zbiorze testowym, walidację krzyżową (należy podać liczbę zbiorów, na które zostaną podzielone dane podczas uczenia i testowania, proces ten zostanie powtórzony Folds razy), oraz procentowy podział zbioru danych na uczące i testowe.

Na początku warto dokładnie przyjrzeć się wynikom klasyfikacji dla zbioru uczącego. Jeśli skuteczność nie wynosi 100\% warto spróbować przejrzeć szczegółowe wyniki klasyfikacji poszczególnych próbek (w tym celu trzeba wybrać opcję Output predictions w menu More options...), żeby zobaczyć które próbki zostały źle sklasyfikowane. Te próbki można usunąć i powtórzyć eksperymenty. Czasami są to typowe błędy lub osobliwości, i po ich usunięciu zbiór klasyfikuje się znacznie lepiej. W innych przypadkach usunięcie błędnie sklasyfikowanych próbek nic nie pomaga, i pojawiają się inne błędy. Może to oznaczać, że zbioru nie da się nauczyć ze 100-procentową dokładnością.

Sprawdzając wyniki nie należy skupiać się jedynie na skuteczności klasyfikacji, ale sprawdzić również jakie błędy w niej wystąpiły (które klasy były ze sobą mylone i w którą stronę).

Selekcja atrybutów

Następnymi eksperymentami jest sprawdzenie jak na skuteczność klasyfikacji wpływa wybór podzbioru zbioru atrybutów. Należy przetestować metody automatycznego doboru atrybutów dostępne w programie, jak również skonfrontować otrzymane wyniki z doborem ręcznym wykonanym według własnej analizy.

W zakładce Select attributes, po wybraniu klasyfikowanego atrybutu (okno nad przyciskiem Start) i naciśnięciu przycisku Start, uruchomimy operację selekcji atrybutów. Numery oraz nazwy wybranych atrybutów wyświetlone zostaną w oknie Attribute selection output.

Usunięcie zbędnych atrybutów - w zakładce Preprocces zaznaczyć atrybuty do usunięcia, kliknąć przycisk Remove (pod oknem z atrybutami) i powtórnie wykonać klasyfikację.

Inne sposoby wyboru atrybutów - w zakładce Preprocess wybrać przycisk Choose w oknie Filter, następnie wybrać weka->filters->supervised->attribute->AttributeSelection. Po kliknięciu w linię komend polecenia filtracji można wybrać metodę wyboru atrybutów. W celu zastosowania filtru należy nacisnąć Apply.

Dyskretyzacja atrybutów liczbowych

Innym eksperymentem może być zbadanie sposobu podziału danych liczbowych na przedziały. Należy sprawdzić jak liczba możliwych wartości atrybutów wpływa na skuteczność klasyfikacji. Warto sprawdzić to zmieniając liczbę przedziałów dla pojedynczych atrybutów jak i dla wszystkich jednocześnie. Podział powinien być przeprowadzony automatycznie, wykorzystując funkcjonalność używanego programu, lecz sterowany wybranymi parametrami, jak również ręcznie, bezpośrednio na danych (np. za pomocą arkusza kalkulacyjnego lub skryptu).

W celu modyfikacji domyślnej dyskretyzacji atrybutów liczbowych - w zakładce Preprocces wybrać przycisk Choose w oknie Filter, następnie wybrać weka->filters->unsupervised->attribute->Discretize. Po kliknięciu w linię polecenia filtracji wybrać można atrybuty podziału danych liczbowych przez attributeIndices. Można podać ich zakres (np. 3-last lub first-2) lub wartości oddzielone przecinkami (np. 1,3). Parametr bins to liczba przedziałów, na których podzielone zostaną wartości atrybutów.

Etap 2 (wykonanie zadania)

Zasadnicza część zadania polega na zbudowaniu i przećwiczeniu Naiwnego Klasyfikatora Bayesowskiego na własnym zestawie dobrych danych statystycznych opisujących jakieś rzeczywiste zjawisko. Jak wybrać "dobry" zbiór danych, i co to znaczy "przećwiczenie" jest wyjaśnione w poniższych uwagach: