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:
-
Dane powinny być statystyką jakiegoś zjawiska opisanego wektorem atrybutów i
wyrażone w postaci pewnej liczby przypadków (próbek). Najlepiej byłoby, gdyby
dane były zrozumiałe dla laika, przynajmniej częściowo. Dane muszą być
prawdziwe, w sprawozdaniu należy podać ich źródło.
Sztucznie wygenerowane dane na ogół nie nadają się do tego eksperymentu.
W zbiorze statystycznym te same próbki mogą się powtarzać, i zwykle nie
wystąpią wszystkie możliwe kombinacje wartości (niektóre mogą być bardzo
nietypowe, lub w ogóle fizycznie nierealizowalne). Zbiór zawierający
wszystkie możliwe kombinacje wartości atrybutów, po jednej próbce każdego,
praktycznie nigdy nie jest statystyką.
Uwaga na zbiory danych dotyczące samochodów - jest niemal niemożliwe wykonanie
poprawnej analizy na takim zbiorze. Jest coś w ludzkim myśleniu o
samochodach, co nie poddaje się maszynowemu uczeniu się. Poza tym większość
tych zbiorów nie jest statystykami.
Proszę również nie używać do własnego ćwiczenia bardzo rozpowszechnionych
zbiorów danych: irysów (powyżej), ani grzybów. Ten ostatni jest dobrym zbiorem
danych statystycznych, jednak ze względu na popularność i opisy w wielu
opracowaniach, trudno wykonać z nim prawdziwie samodzielne ćwiczenie.
Ponadto zdarzają się zestawy danych statystycznych, które są tak dobre, że
... aż za dobre. Są one zoptymalizowane pod kątem klasyfikacji. Na przykład
zawierają wyselekcjonowane atrybuty, z których już nic odrzucić nie można bez
pogorszenia jakości klasyfikacji. Czasem wykonana jest też zoptymalizowana
dyskretyzacja wartości atrybutów w wyniku której atrybut(y) zostały zamienione
na dyskretne. Taki zbiór można poznać po tym, że jakiekolwiek operacje na
atrybutach tylko pogarszają klasyfikację. Wykonanie wartościowego,
pouczającego ćwiczenia na takim zbiorze jest również niemożliwe. Czasem można
odnaleźć oryginalną, niezoptymalizowaną wersję takiego zbioru, i z nią pracować.
-
Orientacyjne wymagania ilościowe: minimum 5 atrybutów i minimum 100 próbek
danych. Aczkolwiek komfortowe minimum próbek powinno być bliższe 1000, a od
10000 próbek zaczyna się ciekawa praca. Liczba próbek niezbędna do sensownej
analizy jest uzależniona od liczby atrybutów i zbioru ich wartości. 100
próbek może być wystarczające dla 5 atrybutów binarnych, lecz dla 5 atrybutów
o 5 dozwolonych wartościach, może to być stanowczo zbyt mało.
-
W prawdziwym zbiorze danych mogą występować próbki z brakującymi wartościami
atrybutów. Mogą również występować próbki sprzeczne, to znaczy takie same
kombinacje wartości atrybutów z różnymi klasami. Ani jedno ani drugie nie
jest przeszkoda w analizowaniu takiego zbioru, aczkolwiek skuteczność uczenia
się na takich zbiorach będzie mniejsza. Programy do analizy danych zwykle
radzą sobie z brakującymi wartościami, natomiast próbki sprzeczne można wykryć
poza programem i np. usunąć ze zbioru.
Zwróćmy jednak uwagę, że każdy dostatecznie duży zbiór prawdziwych danych może
zawierać błędne próbki, i jest to na ogół niemożliwe do wykrycia (poza pewnymi
oczywistymi przypadkami, np. gdy wiek osoby wypada poza przedziałem 0..130,
zawartość procentowa poza 0..100, itp.).
-
Jeśli dane są liczbowe, zwłaszcza zmiennoprzecinkowe, to programy do analizy
statystycznej zwykle dzielą je na przedziały wartości. Na początku można
zaakceptować ten podział, jednak może on być nieoptymalny. W programie można
sterować procesem podziału, ale tylko w ograniczonym zakresie (typowo liczba
przedziałów). Również jeśli jakiś atrybut jest dyskretny, lecz ma więcej niż
około 10 różnych wartości, to zwykle wymaga pogrupowania na mniejszą liczbę
przedziałów.
Dlatego czasami niezbędne jest wstępne przetwarzanie, które można wykonać
samodzielnie napisanym skryptem, programem, arkuszem kalkulacyjnym, itp.
Dokonując podziału wartości warto zrobić to w taki sposób, aby dobór
przedziałów wartości związany był z ich interpretacją. Np. wartość liczbową
wyniku jakiegoś badania można pogrupować w 3 przedziały: poniżej normy, w
normie, powyżej normy, jeśli znamy granice normy. Należy porównać skuteczność
klasyfikacji z ręcznym i automatycznym podziałem na przedziały.
-
Celem jest osiągnięcie jak najmniejszego błędu testowania. Analizę należy
rozpocząć od testowania na zbiorze uczącym. Można wtedy przeprowadzić pewne
wstępne kroki optymalizacji, np. usuwanie kłopotliwych próbek, eliminację
atrybutów, lepszą dyskretyzację, itp. W ten sposób wyznaczamy teoretyczny
pułap wyuczalności zbioru danych.
Dalszą analizę prowadzimy na oddzielnych zbiorach uczącym i testowym. Podział
musi być bardzo porządnie losowy, i należy przeprowadzić eksperymenty wiele
razy, z różnymi podziałami danych na uczące i testowe. Dobre oszacowanie
błędu na zbiorze testowym można otrzymać automatycznie, np. przez walidację
krzyżową, jeśli program posiada taką funkcję.
-
Dalsze eksperymenty powinny polegać na uczeniu klasyfikatora różnymi
podzbiorami zbioru danych aby określić ile próbek jest potrzebnych do
nauczenia się klasyfikacji zjawiska, a jednocześnie uczeniu różnymi
podzbiorami zbioru atrybutów, żeby określić, które mają największy wpływ na
określanie klasy, a które tylko zamącają klasyfikację. Celem jest znalezienie
dobrego, minimalnego zestawu atrybutów, i minimalnej liczby próbek, przy
których klasyfikator zdolny jest nauczyć się poprawnej klasyfikacji z pożądaną
dokładnością.
Jednak co to znaczy pożądana dokładność różni się znacznie w zależności od
tego co klasyfikujemy, i z jakich danych. Czasami 30\% dokładność jest nie do
przeskoczenia. Czasami 99.9\% wcale nie imponuje. Wyznaczenie tej
pożądanej dokładności jest też częścią zadania.
-
Jeśli danych jest dużo to można zacząć od małych zbiorów uczących i testować
wielkimi, w razie potrzeby rozszerzając zbiór uczący do momentu, aż
klasyfikator osiągnie pewien poziom dobrych wyników. Na odwrót, jeśli danych
jest mało (np. kilkaset) to często ma sens zacząć uczenie od dużego zbioru
uczącego (np. 90\% wszystkich próbek), i potem zmniejszać go, aby przekonać
się jak duża seria ucząca jest niezbędna do wyuczenia klasyfikatora. Zawsze
należy upewnić się czy zwiększanie serii uczącej ma pozytywny wpływ na
skuteczność klasyfikacji.
-
Szczególnym problemem są nietypowe próbki, w tym próbki o ekstremalnych
wartościach atrybutów, albo próbki o względnie małolicznej klasie. Ich
traktowanie może być różne, w zależności od okoliczności. Nietypowe próbki
można czasami usunąć ze zbioru danych, uzyskując lepsze efekty uczenia się.
Jednak czasami nietypowe próbki są istotne z punktu widzenia zastosowania
klasyfikatora, i nie można ich usunąć. W takich przypadkach trzeba poszukiwać
sposobu ich bardziej skutecznego uwzględnienia przez metodę NBC. Na przykład,
jeśli wartość atrybutu odbiega daleko od typowego przedziału wartości, można
zdefiniować oddzielny przedział wartości, typu od x do nieskończoności, co
pozwala podzielić typowy przedział wartości w racjonalny sposób. Jeśli jakaś
klasa ma mało próbek, a jest ważna dla klasyfikacji, to można powielić próbki
tej klasy w zbiorze danych, aby zwiększyć ich wagę we wzorach NBC.
-
Założeniem leżącym u podstaw klasyfikatora bayesowskiego naiwnego jest
niezależność rozkładów prawdopodobieństwa atrybutów, co w rzeczywistości jest
często niespełnione. Jeśli w zbiorze atrybutów znajdują się takie, które
wydają się skorelowane, warto sprawdzić jak na skuteczność klasyfikacji wpływa
ich połączenie w jeden atrybut o większej liczbie przyjmowanych wartości
(połączenie dwóch atrybutów binarnych daje jeden atrybut o 4 wartościach).
W ramach eksperymentu warto sprawdzić jaki wpływ na skuteczność klasyfikacji
ma dodanie atrybutu, który nie ma znaczenia - jest np. wartością losową. Czy
otrzymany wynik jest zbieżny z tym co mówi teoria NBC?