Politechnika Warszawska Wydział Elektroniki i Technik Informacyjnych Instytut Informatyki Rok akademicki 2014/2015 PRACA DYPLOMOWA INŻYNIERSKA Jakub Piotr Strzałek Podsystem zarządzania i testowania klasyfikatorów do weryfikacji dokumentów tekstowych Opiekun pracy dr inż. Piotr Andruszkiewicz Ocena:...... Podpis Przewodniczącego Komisji Egzaminu Dyplomowego
Kierunek: Specjalność: Informatyka Inżynieria Systemów Informatycznych Data urodzenia: 1991.10.23 Data rozpoczęcia studiów: 2011.02.22 Życiorys Nazywam się Jakub Piotr Strzałek, urodziłem się 23 października 1991 roku w Radzyniu Podlaskim. W 2010 roku ukończyłem I Liceum Ogólnokształcące w Radzyniu Podlaskim. W lutym roku 2011 rozpocząłem studia na wydziale Elektroniki i Technik Informacyjnych Politechniki Warszawskiej na kierunku Informatyka, wybierając w toku studiów specjalizacją Inżynieria Systemów Informatycznych. W roku 2014 rozpocząłem, a w kolejnym roku ukończyłem, praktyki w firmie Pentacomp Systemy Informatyczne S.A.... Podpis studenta EGZAMIN DYPLOMOWY Złożył egzamin dyplomowy w dniu...2015 r z wynikiem... Ogólny wynik studiów:... Dodatkowe wnioski i uwagi Komisji:.........
STRESZCZENIE Praca podejmuje problem utworzenia spójnego interfejsu aplikacji internetowej umożliwiającego zarządzanie procesem w kontekście różnych podsystemów klasyfikacji. Prezentuje podstawowe informacje dotyczące metod klasyfikacji, w szczególności w kontekście naiwnego klasyfikatora Bayesa oraz maszyny wektorów nośnych. Ponadto zaprezentowane zostały wyniki wykonanych badań dla zbiorów uczących zasobów internetowych. Słowa kluczowe: klasyfikacja, uczenie maszynowe, Naiwny Klasyfikator Bayesa, Maszyna Wektorów Nośnych, reprezentacja dokumentów tekstowych, miary klasyfikacji CLASSIFIERS MANAGING AND TESTING SUBSYSTEM FOR TEXT DATA VERIFICATION The following work discusses the difficulty of creating a coherent interface of an internet application, which will allow the management of the processes in the context of various subsystems classification. Furthermore it presents basic information regarding methods of classification, focusing especially on the naive Bayes classifier and the support vector machine. Moreover this work presents research results on the web search data. Keywords: classification, machine learning, Naive Bayes Classifier, Support Vector Machine, classification measures
Spis treści 1 Wstęp...7 2 Eksploracja danych...8 2.1 Techniki eksploracji...8 3 Klasyfikacja...10 3.1 Typy klasyfikacji...11 3.2 Etapy klasyfikacji...11 3.3 Dane i podział na zbiory...12 3.4 Reprezentacja danych...13 3.4.1 Reprezentacja pełna...13 3.4.2 Reprezentacje unigramowe...14 3.4.3 Inne reprezentacje...14 3.5 Testowanie...14 3.5.1 Wynik klasyfikacji...15 3.5.2 Miary...15 4 Klasyfikatory...17 4.1 Naiwny klasyfikator Bayesa...21 4.1.1 Opis modelu...21 4.2 Maszyna wektorów nośnych...23 4.2.1 Liniowo separowalny...23 4.2.2 SVM z funkcją błędu...28 4.2.3 SVM z funkcją jądra...30 5 Implementacja...32 5.1 Technologia...32 5.1.1 Opis zależności pomiędzy technologiami...33 5.2 Architektura...34 5.2.1 Warstwa prezentacji...35 5.2.2 Warstwa logiki...35 5.2.3 Baza danych i plików...36 5.3 Funkcje programu...37 5.3.1 Przeprowadzanie testów...37 5.3.2 Prezentacja wyników przeprowadzonego testu...39 4 / 65
5.3.3 Zapis wyniku testu do bazy danych...41 5.3.4 Generowanie i zapis raportu z testów...41 5.3.5 Wczytywanie programu klasyfikacji...42 5.3.6 Modyfikacja oraz eksport zbioru przypadków testowych...42 5.3.7 Wczytywanie i zapisywanie zbiorów testowych...44 5.4 Interfejs programów klasyfikacji...45 5.4.1 Szczegóły implementacji po stronie serwera...45 5.4.2 Opis interfejsu...47 5.4.3 Ograniczenia i uwagi...48 6 Testy...49 6.1 Zbiór testowy...49 6.2 Opis przeprowadzania testów...49 6.3 Wyniki...50 6.3.1 Maszyna wektorów nośnych analiza reprezentacji...50 6.3.2 Klasyfikator Bayes analiza reprezentacji...52 6.3.3 Porównanie klasyfikatorów...54 6.3.4 Miary...55 6.4 Wnioski...58 7 Podsumowanie...59 Załącznik A...62 5 / 65
Nota terminologiczna Element zbioru testowego który jest poddawany procesowi klasyfikacji nazwany został zamiennie obserwacją lub dokumentem. Termin przypisanie został użyty zamiennie z określeniem klasyfikacja. Naiwny Klasyfikator Bayesa oraz maszyna wektorów nośnych wielokrotnie skrótowo zostały nazywane klasyfikatorem Bayes oraz SVM. 6 / 65
1 Wstęp Klasyfikacja oraz ocena klasyfikacji jest bardzo często stosowana w projektach mających na celu stworzenie modelu przy pomocy gotowych zbiorów testowych. Wykorzystywana jest w projektach wymagających przetwarzanie dużej ilości danych, która z uwagi na ograniczenia możliwości człowieka, analizowana jest przez komputery. Polega na znalezieniu zależności oraz dokonania wyboru odpowiedniej klasy, do której należy analizowany przypadek. Tematem pracy jest utworzenie strony internetowej pełniącej funkcję interfejsu do testowania procesu klasyfikacji. Program przewiduje możliwe podłączenie gotowego projektu implementującego klasyfikator oraz modyfikację zbiorów testowych wykorzystywanych przy uczeniu oraz testowaniu klasyfikatorów. W rozdziale 2 wyjaśniony jest proces eksploracji danych oraz stosowanych technik. Wyróżnione zostały różne techniki podzielone ze względu na cel eksploracji danych. Rozdział 3 skupia się na procesie klasyfikacji oraz jego sposobach realizacji. Opisane zostały poszczególne etapy oraz ogólny sposób realizacji tego procesu. Omówiono również reprezentację danych, jej interpretację w kontekście procesu klasyfikacji, oraz wstęp teoretyczny do samego procesu testowania. W rozdziale 4 opisano metody klasyfikacji. Większość z nich zostało omówionych w sposób ogólnikowy, poza naiwną klasyfikacją Bayesa oraz maszyną wektorów nośnych, w oparciu o które zostały przeprowadzone testy oraz weryfikacje poprawnego działania aplikacji. W rozdziale 5 przedstawiono szczegółowe informacje dotyczące samego projektu w tym szczegóły implementacji oraz wykorzystanych technologii. Dodatkowo omówiono interfejs użytkownika oraz opisano wymagania, API i sposób konfiguracji dotyczący programu klasyfikacji. W rozdziale 6 zawarto informację o wykonanych testach, głównie w kontekście samego programu klasyfikacji. Przedstawiono zbiór testowy, sposób jego uzyskania oraz wyniki i analizę otrzymanych rezultatów testowania. Załącznik A opisuje instrukcję krok po kroku w celach instalacji systemu oraz jego uruchomienia. 7 / 65
2 Eksploracja danych Eksploracja danych jest procesem automatycznego odkrywania nietrywialnych, dotychczas nieznanych, potencjalnie użytecznych reguł, zależności. Głównym zadaniem eksploracji jest zarządzanie dużymi zbiorami danych oraz wydobywanie z nich przydatnych informacji oraz wiedzy [1]. Termin duże zbiory danych zazwyczaj odnosi się do informacji, które ze względu na swoją specyfikę (różnorodność oraz duży rozmiar) trudno jest analizować oraz przetwarzać. Mimo wszystko ich analiza jest bardzo wartościowa i prowadzi do uzyskania nowej wiedzy. Odkrywane w procesie eksploracji danych wzorce mają formę głównie wykresów oraz reguł logicznych. Eksplorację można ująć jako analizę danych, problemów trudnych do przeprowadzenia przez człowieka, ze względu na swój rozmiar. Dodatkowo celem jest zrozumienie samych pozyskanych informacji oraz mechanizmów z nimi związanych. Pojęcie eksploracji danych oraz odkrywania wiedzy rozpowszechniło się razem z rozwojem technologii bazodanowych w latach 80' 90', kiedy to zaczęły powstawać hurtownie danych. Jedną z branży, które były zainteresowane rozwojem oraz jego wspieraniem była analiza biznesowa (ang. Business Intelligence). Istnieje wiele techniki stosujących eksplorację danych. Poniżej przedstawione główne z nich. Specjalnie została pominięta technika klasyfikacji, która szczegółowo zostanie omówiona w rozdziale 3. 2.1 Techniki eksploracji Zgodnie z ogólną definicją, techniki eksploracji danych są to metody, których głównym celem jest odnalezienie ogólnych własności obiektów. Znalezione opisy obiektów mogą mieć postać jednej z dwóch reguł: reguła dyskryminacji, reguła charakteryzacji. Pierwsza z nich polega na porównaniu i znalezieniu różnic analizowanej danej z elementami porównywanymi [1]. Druga reguła, w przeciwieństwie do pierwszej, polega na podsumowaniu głównych cech elementów należących do jednej klasy. Wynik może zostać przedstawiony w różnych formach np. tabeli, wykresu kołowego lub słupkowego. 8 / 65
Odkrywanie asocjacji Zbiór metod obejmujących odkrywanie interesujących zależności, korelacji pomiędzy danymi. Zidentyfikowane w ten sposób korelacje noszą nazwę asocjacji [2]. Polega na sprawdzeniu, które atrybuty są ze sobą powiązane. Metody te często występują pod nazwą analizy koszyka sklepowego (ang. market basket analysis). Zebrana wiedza zapisywana jest w formie reguł: Jeżeli poprzednik to następnik, podawana razem z miarami opisującymi prawdopodobieństwa zajścia zależności (wsparcie oraz ufność). Grupowanie Polega na gromadzeniu (ang. clustering) rekordów (danych) w zbiory zawierające podobne obiekty [3]. Każdy z takich zbiorów nazywany jest grupą. Dane zebrane w jedną grupę posiadają względem siebie podobne cechy, nie są jednak dopasowywane i przypisywane do żadnej z klas. Algorytmy grupowania próbują zmaksymalizować stopień podobieństwa danych. Często są realizowane jako wstępny etap procesu eksploracji danych. Predykcja Głównym zadaniem predykcji jest określenie na podstawie istniejących i zgromadzonych do tej pory danych przewidywanego wyniku. Przykładem może być określenie liczby ofiar śmiertelnych w wyniku wypadków drogowych dla hipotetycznego wprowadzenia zmiany maksymalnej dozwolonej prędkości. 9 / 65
3 Klasyfikacja Załóżmy, że został zdefiniowany zbiór obserwacji, w którym każda z nich posiada określone cechy. Odwzorowanie obserwacji w zbiór predefiniowanych klas nazywamy klasyfikacją [4]. Proces ten można zapisać jako funkcję: F :O P (K) (3.1) Rysunek 1: Klasyfikacja jako funkcja. Symbolem O oznaczono zbiór obserwacji, zaś elementami tego zbioru są odpowiednio o 1, o 2 oraz o 3. Do zbioru klas należy k 1, k 2 oraz k 3. W zapisie (3.1) zbiór obserwacji oznaczono jako literą O, zaś symbolem P(K) oznaczono zbiór wszystkich podzbiorów klas. Każda z obserwacji jest interpretowana jako wektor n-wymiarowy, w którym każdy wymiar reprezentuje wartość poszczególnego argumentu. Możemy więc zapisać dowolną obserwację jako: o=(o 1, o 2, o 3... o n ) (3.2) Algorytmy klasyfikacji rozróżnia się na podstawie możliwości podziału hiperpłaszczyzny. Załóżmy, że chcemy przedstawić dane testowe na hiperpłaszczyźnie n-wymiarowej. Każda dana reprezentuje punkt. Klasyfikację możemy interpretować jako: x F (x)=x X P(K ) i X V i (3.3) 10 / 65
Klasyfikator dzieli hiperpłaszczyznę na części, oznaczone jako V i, które są parami rozłączne. Często, w kontekście tak przedstawionej interpretacji problemu klasyfikacji, używa się pojęcia liniowej separowalności, opisującej czy możliwy jest podział zbioru punktów przestrzeni za pomocą hiperpłaszczyzny tak, aby były spełnione wyżej opisane warunki [5]. W niniejszej pracy skupimy się na klasyfikacji stron internetowych. 3.1 Typy klasyfikacji W przypadku klasyfikacji zasobów internetowych [6], możemy wyróżnić następujące schematy podziałów: 1. Liczność zbioru klasy. W przypadku liczności zbioru klas sam proces ma sens dla zbioru większego od jednego. Proces, w którym możliwe są do przypisania tylko dwie klasy, nazywamy klasyfikacją binarną. Występuje to często w przypadku np. sprawdzania czy obserwacja jest określonego typu czy też nie. Jeżeli zbiór takich klas jest liczniejszy, wtedy występuje klasyfikacja wieloklasowa. 2. Ilość klas powiązanych z obserwacją. Powyższe sformułowanie może być mylące, gdyż przypisanie jest realizowane dla obserwacji, a nie odwrotnie. Jednak faktem jest, że istnieje rodzaj klasyfikacji, nazywany klasyfikacją wielo-etykietowaną, w którym obserwacja może być przypisana do więcej niż jednej klasy. Analogicznie, jeżeli zakładamy, że dokument może posiadać tylko jedną przypisaną klasę, mówimy o klasyfikacji jedno-etykietowanej. 3. Stopień przynależności do klasy. Zazwyczaj przynależność do klasy określana jest binarnie, innymi słowy, albo obserwacja należy do danej klasy, albo nie. W takim przypadku używa się sformułowania twarda klasyfikacja. Istnieją jednak przypadki, w którym określa się stopień przynależności do klas, wtedy jest to tzw. miękka klasyfikacja. 4. Relacje względem klasy. Ujmując inaczej, czy istnieje jakaś hierarchia wewnątrz zbioru klas. Przykładem klasyfikacji hierarchicznej może być problem przypisania konkretnego zwierzęcia do gatunku. Zarówno klasa jamnik jak i owczarek niemiecki są związane z klasą pies. Klasyfikację, w której nie zachodzą takie relacje, nazywamy płaską. Warto wspomnieć, że klasyfikator wykorzystywany w projekcie oraz w testach, zgodnie z powyższymi definicjami, można zapisać jako binarny, jedno-etykietowy, twardy oraz płaski. 3.2 Etapy klasyfikacji Klasyfikacja danych to proces dwuetapowy. Pierwszy etap dotyczy konstrukcji modelu, kolejny zaś zawiera wszystkie działania wykorzystujące utworzony klasyfikator. Konstrukcje możemy podzielić na dwa dodatkowe kroki. W pierwszym, nazywanym krokiem uczenia bądź treningu [1], 11 / 65
klasyfikator jest budowany na podstawie uprzednio zdefiniowanego zestawu danych. Klasyfikator analizuje udostępnione dane. Kolejny krok nazywany jest krokiem testów. Na tym poziomie gotowy model jest testowany i sprawdzany, czy klasy przyporządkowane przy użyciu modelu są zbieżne z góry określonymi przez dostarczone dane. Klasyfikacja Kontrukcja modelu Korzystanie z klasyfikatora Trening Rysunek 2: Podział klasyfikacji na etapy Testowanie 3.3 Dane i podział na zbiory Dane przeznaczone do nauki klasyfikatora dzielone są na dwa zbiory. Pierwszy zbiór służy jako treningowy w omawianym już kroku trenowania, drugi zaś ma na celu testowanie i weryfikację poprawności. Występuje tutaj uczenie nadzorowane (ang. supervised learning) [7]. Algorytm klasyfikacji Dane trenujące Nazw isko Wiek Dochód Decyzja Dąbrow ski 39 5000 Pozytyw na Kow alski Now ak 22 60 3000 3400 Pozytyw na Negatyw na Wiśniew ski 41 9000 Pozytyw na Model............ Rysunek 3: Krok uczenia klasyfikatora. Na podstawie diagramów zamieszczonych w [1] 12 / 65
Każda dana jest reprezentowana jako n-wymiarowy wektor, identycznie jak obserwacja. Elementy tego wektora nazywa się cechami. Na podstawie cech ustalane są reguły nazywane modelem. Model Dane testowe Nowe dane Nazw isko Wiek Dochód Decyzja Kamiński Kow alczyk 39 44 2000 3000 Negatyw na Negatyw na Woźniak 28 2500 Pozytyw na Wójcik 32 7500 Pozytyw na............ Szymański 40 4000 Decyzja? Pozytyw na Rysunek 4: Krok testowania klasyfikatora. Na podstawie diagramów zamieszczonych w [1] Pierwszy krok można utożsamiać z nauką przypisania asocjacji danych do klasy. Takie przypisanie może mieć formę reguły, drzewa decyzyjnego bądź zapisu matematycznego, w zależności od wybranego przez nas algorytmu. W drugim kroku występuje weryfikacja przypisań z gotowym zbiorem rozwiązań. 3.4 Reprezentacja danych W niniejszym projekcie wykorzystano program klasyfikacji stron www. Problemem w przypadku klasyfikacji stron internetowych jest sposób reprezentacji danych. Każda strona www przedstawiona jest w formacie HTML (ang. HyperText Markup Language). W takim formacie część danych jest ustrukturyzowana, lecz w formie niewygodnej dla analizy z punktu widzenia klasyfikacji. Powodem tego są znaczniki HTML, które wprowadzają w dużej mierze jedynie informacje o formatowaniu danych, a nie samej jej treści. Dla większości programów klasyfikacji, reprezentacja HTML nie jest odpowiednia i nie oddaje istotnych informacji. W tym celu należy zmienić sposób reprezentacji dokumentu, na bardziej czytelny. Przede wszystkim dąży się do tego, aby zminimalizować zbędne dane oraz zmaksymalizować istotne informacje dla konkretnego problemu [8]. 3.4.1 Reprezentacja pełna Jednym z rozwiązań jest zastosowanie tzw. reprezentacji pełnej, innymi słowy przechowanie dokładnego miejsca wystąpienia słowa oraz wszystkich jego wystąpień. W ten sposób można z dużą dokładnością odtworzyć stan pierwotny dokumentu. Jednak istnieją powody, dla których 13 / 65
taka reprezentacja jest niewystarczająca. Ze względu na przechowywanie niepotrzebnych danych, zazwyczaj utrudniona jest analiza samych dokumentów. Powoduje to spadek wydajności algorytmów. 3.4.2 Reprezentacje unigramowe W przypadku, gdy nie interesuje nas w żadnym stopniu położenie wyrazu, można zastosować typ reprezentacji unigramowej (ang. unigram model). Podstawową jednostką takiej struktury jest słowo (ang. term). Zawarte w dokumencie słowa pełnią rolę atrybutów. Dokument przedstawiony jest jako wektor, w którym przechowywana jest informacja dotycząca wystąpienia konkretnych słów [9]. Inna nazwa to worek słów (ang. bag of words). Liczba wymiarów takiego wektora jest równa liczbie różnych słów występujących w tekście. Występują dwa rodzaje takiej reprezentacji: binarna jedyna informacja przechowywana to fakt, czy dane słowo zaistniało w tekście czy też nie, częstotliwościowa liczona jest ilość wystąpień danego słowa w tekście. W projekcie wykorzystałem obie te reprezentacje, których wpływ na skuteczność klasyfikacji został przeanalizowany i przedstawiony w rozdziale 6.3. 3.4.3 Inne reprezentacje Reprezentacja n-gramowa W przeciwieństwie do unigramowej, reprezentacja n-gramowa przechowuje informację dotyczącą wzajemnej kolejności słów w dokumencie. Zawiera ona dane o częstości występowania sekwencji, o długości n wyrazów. Ze względu na wykładniczy wzrost wymiaru wektorów, stosowana zazwyczaj dla n nieprzekraczającego trzy. Zauważmy, że reprezentację unigramową można interpretować jako n- gramową gdzie n=1. Reprezentacja γ-gramowa Polega na złożeniu modelu n-gramowego z unigramowym. W przeciwieństwie do obydwu tych reprezentacji, które przechowywały informacje tylko o sekwencjach n wyrazowych, γ-gramowa zawiera zarówno sekwencje o długości n, jak i krótsze. Innymi słowy, przechowuje sekwencje nie dłuższe niż n. Reprezentacja pozycyjna Reprezentacja pozycyjna znacząco wyróżnia się na tle wyżej przedstawionych. Dokument jest dzielony na określonej wielkości części. Dla każdej części oblicza się częstość wystąpienia słów. Pozwala to otrzymać funkcję rozkładu słów w różnych przedziałach dokumentu. Należy zauważyć, że w skrajnych przypadkach otrzymamy znane reprezentacje. Jeżeli ilość przedziałów będzie równa ilości słów, otrzymamy reprezentacje pełną. Jeżeli będzie istniał tylko jeden przedział, wtedy otrzymamy reprezentację unigramową. 14 / 65
3.5 Testowanie Poniżej zostały przedstawione podstawy teoretyczne, wymagane do zrozumienia przebiegu badań wybranych metod klasyfikacji w rozdziale 6. 3.5.1 Wynik klasyfikacji Wynik klasyfikacji Przynależność do klasy Pozytywna Negatywna Pozytywna Prawdziwie pozytywna Fałszywie pozytywna Negatywna Fałszywie negatywna Prawdziwie negatywna Tabela 1: Rodzaje możliwych wyników przypisania elementu do klasy dla klasyfikacji binarnej Testowanie klasyfikatorów polega na porównaniu wyników dostarczonych przez skonstruowany klasyfikator (poddany treningowi) z wartościami oczekiwanymi, dostarczonymi zbiorami danych. Należy wspomnieć, że rozpatrujemy w tym przypadku klasyfikację binarną. Dla większej liczby klas należy rozważyć mikro-uśrednianie oraz makro-uśrednianie [10]. Dla każdego przypadku klasyfikacji możemy otrzymać cztery możliwe wyniki: prawdziwie pozytywny (ang. true positive), prawdziwie negatywny (ang. true negative), fałszywie pozytywny (ang. false positive) oraz fałszywie negatywny (ang. false negative). Dwa pierwsze rezultaty są zgodne z wynikami oczekiwanymi, z kolei dwa kolejne nie. Tabelę 1 można rozszerzyć o dodatkową wartość możliwego wyniku klasyfikacji, mianowicie: brak klasyfikacji. W przypadku, gdy w procesie klasyfikacji trudno określić przynależność obserwacji, można oznaczyć ją jako niesklasyfikowaną. Dodaje to zatem do powyższej puli czterech możliwych wyników przyporządkowania konkretnego testu dwie nowe wartości: nie sklasyfikowany pozytywny (ang. not classified positive) oraz, analogicznie, nie sklasyfikowany negatywny (ang. not classified negative). W kolejnych rozdziałach niniejszej pracy symbolami TP, TN, FP oraz FN zostanie oznaczona ilość testów zakończonych wynikiem odpowiednio prawdziwie pozytywnym, prawdziwie negatywnym, fałszywie pozytywnym oraz fałszywie negatywnym. 3.5.2 Miary Klasyfikację można ocenić poprzez szczegółowe zliczenie ilości poszczególnych wyników na podstawie oceny każdego z przykładów ze zbioru danych przeznaczonych do testów. Nie rozwiąże to jednak w wielu przypadkach problemu definitywnego stwierdzenia jak dobry jest klasyfikator w porównaniu do innego. Logicznym spostrzeżeniem jest fakt, że liczba prawdziwie pozytywnych oraz prawdziwie negatywnych przypisań powinna być możliwie jak najwyższa. W celu łatwiejszej oceny klasyfikacji wprowadzono różne miary. Poniżej opisano sposób ich obliczania oraz krótki opis [11]. 15 / 65
Dokładność Wyraża w jakim stopniu klasyfikacja jest poprawna (stosunek pozytywnie udzielonych wyników do ilości wykonanych testów): TP+TN A= TP+TN+ FP+ FN (3.5.1) Precyzja Informuje jak dużo przypadków rozpatrzonych przez klasyfikator pozytywnie jest w rzeczywistości zgodna z poprawną klasą. Nazywana czasami Pozytywnie Przewidywaną Wartością: P= TP TP+FP (3.5.2) Czułość Ilość przypadków, które powinny zostać sklasyfikowane pozytywnie można wyrazić poprzez: TP+ FN (3.5.3) Czułość opisuje stosunek pozytywnie rozpatrzonych przypadków do oczekiwanej ich ilości: S= TP TP+FN (3.5.4) F-miara W związku z tym, że sama informacja o precyzji i czułości nie daje wystarczająco dużo informacji, często korzysta się z F-miary, będącej średnią ważoną z precyzji i czułości. We wzorze pojawia się dodatkowy parametr β: F=(1+β 2 ) P S β 2 (P+S) (3.5.5) Negatywna przewidywana wartość Wyraża stosunek pozytywnie sklasyfikowanych negatywnych przypadków, do liczby ich przypisań: NPV = TN TN +FN (3.5.6) 16 / 65
4 Klasyfikatory Budowanie modelu zależy od wyboru algorytmu tworzącego klasyfikator. Istnieje szereg metod pozwalających na budowanie modelu. Głównie dzielimy je na [12]: 1. metody logiczne, 2. metody oparte o sieci neuronowe, 3. metody statystyczne, 4. metody oparte na przykładach, 5. maszyna wektorów nośnych. Metody logiczne Główne algorytmy wchodzące w skład tych metod to drzewa decyzyjne oraz klasyfikacje oparte na regułach. Model oparty na regułach cechuje się wyrażeniami zapisanymi jako Dysjunkcyjna Postać Normalna (ang. disjunctive normal form, DNF). Matematycznie można to zapisać jako: ( X 1 X 2... X n ) ( X n+1 X n+2... X 2 n )... (X (k 1) n+1 X (k 1) n+2... X kn ) (4.1) W powyższym przykładzie k występuje jako liczba dysjunkcji, zaś n to liczba koniunkcji w poszczególnej dysjunkcji. Celem jest skonstruowanie najkrótszej reguły, opisującej poprawnie każdą klasyfikację ze zbioru treningowego. Zbyt długa reguła może być sygnałem, że algorytm zamiast próby znalezienia korelacji pomiędzy danymi, próbuje zapamiętać wszystkie dane. Metody oparte o sieci neuronowe Metoda ta zostanie omówiona w przypadku pojedynczej warstwy perceptronów oraz w przypadku wielu warstw perceptronów. Przykładem najprostszej sieci neuronowej jest pojedynczy perceptron. Zależność pomiędzy danymi wejściowymi, a wyjściowymi możemy zapisać w poniższy sposób: y= i x i w i (4.2) Symbolem x oznaczono wartości wejściowe, z kolei symbolem w wagi tych wartości. Sumujemy kolejno iloczyn wartości i wagi tego wejścia, następnie otrzymaną wartość y należy porównać do wartości progowej oznaczonej poniżej symbolem e: 17 / 65
f (x)= y<e: 0 y e: 1 (4.3) Najczęstszym sposobem wykorzystywania powyższego modelu jest wywołanie algorytmu dla każdego przykładu ze zbioru trenującego. W wyniku wywołania otrzymamy wektor wag, który powinien być poprawny dla każdego przykładu ze zbioru trenującego. Istotny jest schemat aktualizacji wag. Przykładem jest algorytm WINNOW [13], który zachowuje się w niżej opisany sposób: Jeżeli y' = 0 i y=1 { Dla każdego x i = 1 w i := w i * α } Jeżeli y' = 1 i y = 0 { Dla każdego x i = 1 w i := w i * β } Algorytm 1: Algorytm WINNOW W powyższym algorytmie symbol α to zmienna o wartości większej od 1, zaś symbol β to zmienna o wartości od 0 do 1, y' reprezentuje wartość wyliczoną przez model, zaś y to wartość oczekiwana. WINNOW jest przykładem eksponencjalnego algorytmu aktualizacji. Jednowarstwowe sieci perceptronów miały zasadniczą wadę, nie potrafiły poradzić sobie z klasyfikacją inną niż liniowo separowalna. Jest to jedna z przyczyn zastosowania wielu warstw, ponieważ wielowarstwowe sieci są w stanie poradzić sobie z tym problemem. Składają się one z dużej liczby połączonych ze sobą neuronów, zwanymi również jednostkami. Dzielone są na 3 części: jednostki wejściowe otrzymują informacje wejściowe, jednostki wyjściowe zwracają wynik, jednostki ukryte położenie pomiędzy dwoma pierwszymi warstwami jednostek. 18 / 65
x1 = 0 v11 = -1 w11 = 0.9 y1 = 1.66 v21 = 0 w21 = -1.2 v12 = 0.1 w12 = -0.2 x2 = 1 v22 = 0.8 w22 = 0.6 y2 = 0.32 Rysunek 5: Struktura wielowarstwowej sieci neuronów. Symbolem koła oznaczono jednostki wejściowe, kwadratu jednostki ukryte i wreszcie jednostki wyjściowe oznaczono trójkątem. Wzorowane na rysunku zamieszczonym w [12] Metody statystyczne Metody statystyczne zazwyczaj wykorzystują gotowy model, który stosuje odpowiednie prawdopodobieństwo, z jakim dane obserwacje należą do określonej klasy. Opiera się on w dużej mierze na liniowej analizie dyskryminacji [14], polegającej w dużym uogólnieniu na znalezieniu liniowych złożeń cech, które w najlepszy sposób rozdzielają klasy obiektów. Stosowana jest dla wartości ciągłych. Najbardziej znanym algorytmem stosowanym jest sieć Bayesowska, jak i jej uproszczenie naiwny klasyfikator Bayesa, który zostanie omówiony szczegółowo w następnych rozdziałach. Sama sieć Bayesowska stosuje acykliczny graf skierowany, w którym każdy węzeł (wierzchołek) grafu powiązany jest z określoną cechą. Krawędzie grafu reprezentują probabilistyczne relacje między cechami. Zatem krawędź pomiędzy wierzchołkiem A, a wierzchołkiem B może być identyfikowana jako zależność pomiędzy dwoma wartościami (wartość B zależy od wartości A). W takim przypadku wierzchołek A jest określany jako rodzic wierzchołka B, wierzchołek B jako dziecko wierzchołka A. Jeżeli dowolne dwa węzły nie posiadają między sobą krawędzi, oznacza to, że są względem siebie niezależne [15]. Ze względu na strukturę każdy węzeł jest opisany tabelą prawdopodobieństwa warunkowego (ang. conditional probability tables). Najczęstszym problemem jest sama struktura, która może być jawnie zdefiniowana, np. przez eksperta, bądź nieznana. Zadanie nauki sieci Bayesowch dzielimy na dwa etapy: 1. nauka struktury, 2. determinacja parametrów. 19 / 65
P(Od = T) P(Od = F) P(Wy = T) P(Wy = F) 0.8 0.2 0.9 0.1 Odwodnienie Wysoka temperatura P(Prz = T) P(Prz = F) 0.05 0.95 Przebyty udar Osłabienie Od Wy P(T Od,Wy) P(F Od,Wy) T T 0.9 0.1 T F 0.2 0.8 F T 0.7 0.3 F F 0.01 0.99 Udar P(T Prz,Os) P(F Prz,Os) Diagram 1: Sieć Bayesowa reprezentująca prawdopodobieństwo wystąpienia udaru. Podobny przykład został omówiony w [15]. Prz T T F F Os T F T F 0.95 0.05 0.95 0.8 0.05 0.2 0.01 0.99 Metody oparte na przykładach Zbiór tych metod najczęściej łączy się z algorytmami uczenia leniwego (ang. lazy learning). Uczenie leniwe charakteryzuje się brakiem modelu oraz generowaniem wyniku klasyfikacji bezpośrednio z danych. Do tej pory były omawiane algorytmy uczenia gorliwego (ang. eager learning), które zakładały utworzenie modelu i na jego podstawie określenie przynależności do klasy danych. Przykładem algorytmu opartym na przykładach jest k najbliższych sąsiadów (ang. k nearest neighbours knn). Zakłada on, że dane należące do tej samej klasy mają podobne wartości cech oraz są położone stosunkowo blisko w przestrzeni. Algorytm można zapisać w pseudokodzie następująco [12]: Dla każdej x ze zbioru testów znajdź k najbliższych instancji ze zbioru trenującego zwróć najczęściej przypisaną do tych instancji klasę jako klasę x Algorytm 2: Algorytm ogólny knn Algorytm knn zakłada interpretację graficzną procesu klasyfikacji. Istotne jest zdefiniowanie pojęcia odległości, posługując się odpowiednią metryką. 20 / 65
Rysunek 6: Prezentacja działania algorytmu knn dla k = 5. Zauważmy, że dana dla której dokonywana jest klasyfikacja (trójkąt) zgodnie z algorytmem została zaklasyfikowana do tej samej klasy co dane oznaczone gwiazdą (w otoczeniu znajdują się 4 gwiazdy i jedno koło) 4.1 Naiwny klasyfikator Bayesa Jest to jeden z najprostszych przykładów klasyfikacji opierający się na prostym probabilistycznym modelu [16]. Uogólniając, metoda ta polega na obliczeniu dla każdej obserwacji prawdopodobieństwa jej przynależności do konkretnej klasy. Następnie obserwację przypisuje się do tej klasy, gdzie prawdopodobieństwo jest najwyższe. Olbrzymią wadą tego modelu jest założenie o całkowitej niezależności argumentów zawartych w dokumencie. Jest to główna przyczyna przemawiająca za naiwnym charakterem tego modelu. 4.1.1 Opis modelu Symbolem D oznaczmy zbiór obserwacji. Dodatkowo załóżmy, że obserwacje zostały ponumerowane. Zatem d i będzie dokumentem i elementem zbioru D. Analogicznie możemy zapisać zbiór klas C oraz element tego zbioru c j. Twierdzenie Bayesa Przynależność obserwacji d i do klasy c j możemy zapisać jako prawdopodobieństwo c j pod warunkiem d i lub prościej P(c j d i ). W celu obliczenia tego prawdopodobieństwa możemy skorzystać z twierdzenia Bayesa: 21 / 65
P(c j d i )= P(d i c j)p (c j ) P(d i ) (4.1.1) W następnych nagłówkach zostanie przedstawiony wzór wyliczania poszczególnych elementów równania. Wyliczanie P(d i ) Funkcja (4.1.1) wyraża prawdopodobieństwo wystąpienia wybranego dokumentu. Dla problemu klasyfikacji możemy przyjąć, że każdy dokument ma takie samo prawdopodobieństwo wystąpienia. Zauważmy wtedy, że przy ocenie P(c j d i ) dla wybranego dokumentu mianownik będzie ten sam, zatem na potrzebę tej analizy wzór można uprościć i przedstawić go w wygodnej, nieco zmienionej, formie: Wyliczanie P(c j ) P(c j d i )= P(d c )P (c ) i j j =P (d P(d i ) i c j )P(c) (4.1.2) Kolejny element to prawdopodobieństwo wystąpienia klasy c j. Jest to argument modyfikowalny, podawany jako parametr w przypadku tworzenia klasyfikatora. Można go oszacować (np. poprzez obliczenie, jaką część w dostarczonym zbiorze danych stanowią obserwacje klasy c j ) albo określić jakąś wartość. Początkowo można przyjąć, że każdy dokument występuje z takim samym prawdopodobieństwem: P(c j )= 1 C (4.1.3) Wyliczanie P(d i c j ) W celu wyliczenia ostatniej wartości, będziemy musieli skorzystać z założenia o niezależności atrybutów. Wtedy d i możemy przedstawić jako: Korzystając z powyższego równania: d i =(a 1,a 2,...,a n ) (4.1.4) n P(d i c j )=P(a 1,a 2,...,a n c j )= P (a k c j ) (4.1.5) k=1 Obliczenie członu P(a k c j ) dla każdego atrybutu dokumentu d i zależy już od reprezentacji jaką przyjmiemy. 22 / 65
4.2 Maszyna wektorów nośnych Ta metoda odwołuje się do podanej w poprzednich punktach graficznej interpretacji procesu klasyfikacji. W przypadku tego algorytmu zostaną rozpatrzone trzy jego warianty [17]: 1. liniowo separowalny, 2. liniowo separowalny z funkcją błędu, 3. z funkcją jądra. Ogólnie maszyna wektorów nośnych stara się rozwiązać problem znalezienia hiperpłaszczyzny, która rozróżnia, przy zachowaniu marginesu błędu, punkty należące do innych klas. Należy wspomnieć, że maszyna wektorów nośnych (ang. Support Vector Machine - SVM) stosuje się do klasyfikacji binarnej. W przeciwieństwie do innych metod, gdzie 1 oznaczało należenie do jednej klasy, a 0 do innej, tutaj występuje oznaczenie 1 oraz -1. Zatem elementy zbioru treningowego możemy interpretować jako para wektora atrybutów dokumentu oraz oznaczenie przynależności do klasy: T ={(d 1, y 1 ),(d 2, y 2 ),...,(d n, y n )} (4.2.1) Istnieją strategie umożliwiające rozszerzenie przypisywania danych do wielu klas, poprzez stosowanie różnych klasyfikacji binarnych [18]. Najczęściej używane strategie to: 1. jeden przeciwko wszystkim (ang. One-vs-All) Dla każdego elementu ze zbioru klas zostaje przeprowadzona klasyfikacja binarna, w której klasę pozytywną utożsamia się z przynależnością danej do klasy, a negatywną z brakiem tej przynależności. Zostaje wybrana klasa z największym wynikiem. 2. jeden przeciwko jednemu (ang. One-vs-One) Dla każdej pary elementów ze zbioru klas zostaje przeprowadzona klasyfikacja binarna, w której klasę pozytywną utożsamia się z przynależnością danej do pierwszego elementu pary, a z klasą negatywną przynależnością do drugiego elementu pary. Wybrana zostaje klasa z największą liczbą zwycięstw. 3. korekta błędu kodu wyjściowego (ang. Error Correcting Output Code) Polega na powiązaniu procesu klasyfikacji z macierzą M { 1,0,1 } k l, w której każdy wiersz reprezentuje odpowiednio zakodowaną klasę. Dla każdego l wykonywane jest wnioskowanie, w którym dokonywane jest przekształcenie binarne. W końcowym etapie obliczane jest słowo, które przy użyciu odpowiednich wzorów pozwala na wyliczenie przyporządkowanej klasy. 4.2.1 Liniowo separowalny Do innych algorytmów liniowych, wymienionych już w niniejszej pracy, należą np. naiwny klasyfikator Bayesa, który poszukuje rozwiązania optymalnego względem własnych kryteriów oraz 23 / 65
jednowarstwowa sieć perceptronów, która odnajduje jakiekolwiek rozwiązanie. Graficznie ich rozwiązania można interpretować jako hiperpłaszczyzna rozdzielająca dane należące do różnych klas. SVM liniowo separowalny również odnajduje hiperpłaszczyznę rozdzielającą dane, jednak dodatkowo zakłada się, że będzie zawierała maksymalny margines. Rysunek 7: Hiperpłaszczyzna dzieląca dane z maksymalnym marginesem (czarna linia). Na rysunek naniesiono hiperpłaszczyznę (biała linia), która również rozdziela dane, jednocześnie nie spełniając warunku o maksymalnym marginesie. Czerwone linie często nazywane są wektorami wsparcia Oczywiście istnieje szereg problemów klasyfikacji, dla których nie można znaleźć hiperpłaszczyzny, stąd warunek o liniowej separowalności. Wymaganie maksymalnego możliwego marginesu pojawia się ze względu na możliwe błędy klasyfikacji w przypadku obserwacji znajdującej się blisko hiperpłaszczyzny [19]. Czym większy będzie znaleziony margines, tym mniej podejmowanych jest decyzji z dużym ryzykiem błędu. Zapis algebraiczny W ogólnym przypadku klasyfikację liniową można zapisać dla dwuwymiarowego procesu w następujący sposób (patrz Rysunek 7): w 1 x 1 +w 2 x 2 =b 24 / 65
Obserwacja należy do jednej z klas, jeżeli: w 1 x 1 +w 2 x 2 >b Analogicznie obserwacja należy do innej klasy, jeżeli: w 1 x 1 +w 2 x 2 b W powyższym przykładzie x 1 oraz x 2 to wektor atrybutów dokumentu, z kolei w 1, w 2 oraz b to odpowiednie wagi. Uogólniając do problemów n-wymiarowych: w T x b=0 Zmienną w możemy traktować jako wektor normalny do hiperpłaszczyzny. W poprzednim punkcie oznaczyliśmy wynik przyporządkowania jako należący do zbioru {-1,1}, gdzie 1 oznacza należenie do jednej klasy, a -1 do drugiej. Zatem stwórzmy funkcję: F :R n { 1,1 } W tym celu można zastosować funkcję signum [20] i przedstawić równanie hiperprzestrzeni w następującej postaci: f ( x)=sign( w T x b) (4.2.2) Na rysunku 7 oznaczono niebieską linią margines. Odnaleziona hiperpłaszczyzna jest klasyfikacją SVM, jeżeli spełnia warunki: 1. Hiperpłaszczyzna musi być funkcją opisaną w (4.2.2). Przyjmijmy, że wynik funkcji będziemy oznaczali zmienną y. Powyższą obliczoną funkcję możemy zapisać w uproszczonej formie. Zauważmy, że każdy element zbioru treningowego T spełnia jeden z poniższych warunków d i w+b 1dla y i =1 d i w+b 1 dla y i = 1 (4.2.3) co można zapisać także jako: i y i (d i w+b) 1 (d i, y i ) T (4.2.4) 2. Margines musi być maksymalny. Odległość między dwoma wektorami wsparcia wynosi 2 w, którą możemy zapisać jako 25 / 65
minimalizację w 2. W celu zastosowania optymalizacji kwadratowej (ang. Quadratic Programming Optimization), przekształćmy problem minimalizacji równoważny minimalizacji w 2 2. Podsumowując: w 2 na problem min w 2 2 pod warunkiem i y i (d i w T +b) 1 Jest to tak zwany problem optymalizacji ograniczonej (ang. constrained optimization problem), który można rozwiązać stosując mnożnik Lagrange'a. Możemy zdefiniować dwie funkcje f oraz g i reprezentujące funkcję celu oraz warunku. Wtedy dostaniemy: f (w)= 1 2 wt w (ponieważ w 2 =w T w ) g i (w,b)= y i (d i w T +b) 1 0 co podstawiając do definicji otrzymamy funkcjonał, zwany Lagrangianem: N L(w,b,α)=f (w) α i g i (w, b) i=1 Dodatkowo ze względu na nierówność warunku g i (w,b) 0 zakładamy, że i α i 0. Podstawiając funkcje: L(w,b, α )= 1 N w 2 wt i=1 Obliczając pochodne cząstkowe po w oraz b otrzymujemy: N α i y i (d i w T +b)+ α i (4.2.5) i=1 N L(w,b,α ) =w α w i y i d i =0 i=1 N (4.2.6) w= α i y i d i i=1 L(w,b,α ) b N = i=1 α i d i =0 (4.2.7) Podstawiając (4.2.6) do (4.2.5) otrzymujemy: 26 / 65
L(α)= 1 2 i=1 N N j=1 N α i α j y i y j d T i d j + i=1 N α i b α i y i (4.2.8) i=1 Zauważmy, że na mocy (4.2.7) możemy uprościć (4.2.8) poprzez wyzerowanie odpowiedniego czynnika: L(α)= 1 2 i=1 N N j=1 N α i α j y i y j d T i d j + α i (4.2.9) i=1 W obecnej formie Lagrangian jest zależny jedynie od argumentu α, co znacząco upraszcza funkcję. W tej sytuacji należy jeszcze raz rozwiązać problem optymalizacji, tym razem jednak w kontekście nowo wyliczonej funkcji, zatem: N N j=1 max L(α )= 1 2 i=1 pod warunkiem N α i 0, i=1 N α i α j y i y j d T i d j + α i i=1 α i d i =0 (4.2.10) Wyliczenie powyższej optymalizacji jest zadaniem złożonym, często wykonywanym przez tzw. QP solvery. Wynikiem ich obliczeń jest wektor α, który następnie może być użyty do obliczenia wektora w przy użyciu wymienionego już wzoru (4.2.6). W celu obliczenia parametru b należy zauważyć fakt, że dla wszystkich wektorów wsparcia zachodzi warunek: co można wykorzystać w równaniu (4.2.3) otrzymując: α i 0 (4.2.11) y s (d s w+b)=1 (4.2.12) Symbolem s oznaczmy prostą, będącą wektorem wsparcia. Podstawiając (4.2.6) otrzymujemy: N y s ( α i y i d i d s +b)=1 (4.2.13) i=1 Zauważmy, że indeksami i są tylko wektory będące wektorami nośnymi ze względu na (4.2.11). Wykorzystując fakt, że y i przyjmuje tylko wartości -1 lub 1, uzyskujemy własność y s 2 =1 i mnożąc stronami (4.2.13) otrzymujemy: 27 / 65
N b= y s i=1 α i y i d i d s (4.2.14) 4.2.2 SVM z funkcją błędu W rzeczywistości warunek liniowej separowalności w wielu przypadkach nie jest spełniony dla problemu klasyfikacji. Możemy jednak zmodyfikować obliczenia wyprowadzone w poprzednim punkcie poprzez wprowadzenie dodatkowej zmiennej relaksacyjnej ξ i [21]. ξ 1 ξ 2 ξ 3 Rysunek 8: Klasyfikator SVM z uwzględnieniem funkcji błędu ξi Rysunek 8 przedstawia graficzną ilustrację problemu klasyfikacji. Jak można zaobserwować niektóre punkty zostały niewłaściwie zaklasyfikowane, jednak stosując funkcję błędu można w prosty sposób zniwelować te skutki. Wprowadźmy zmiany do (4.2.3) otrzymując: d i w+b 1 ξ i dla y i =1 d i w+b 1+ξ i dla y i = 1 i ξ i 0 (4.2.15) Podobnie jak poprzednio (4.2.4) spróbujmy ustalić warunek w celach znalezienia ekstremum, zatem: i y i ( d i w+b) 1 ξ i i ξ i 0 (4.2.16) 28 / 65
Pozostaje już tylko modyfikacja samej funkcji, w ramach której będziemy szukać ekstrema. Należy wprowadzić dodatkowy czynnik, będący próbą zmniejszenia liczby błędnych klasyfikacji. Możemy to przedstawić jako: min( 1 N 2 w 2 +C ξ i ) (4.2.17) i=1 Współczynnik C jest parametrem modyfikowalnym, interpretowanym jako stopień zależności pomiędzy wysokością kary dla punktów, niespełniających założeń, a szerokością marginesu. Zatem im większa jest wartość tego parametru tym mniej akceptowalne są odchylenia (punkty z większą wartością zmiennej relaksacyjnej). Wyliczając mnożnik Lagrangiana dla (4.2.17) dla założeń (4.2.16) otrzymujemy: L(w,b, ξ, α,β)= 1 N w+c 2 wt i=1 N ξ i i=1 N α i [ y i (d i w T +b) 1+ξ i ] β i ξ i (4.2.18) i=1 Ze względu na warunek zawarty w (4.2.16) należało dodać dodatkowy atrybut β i, który musi spełnić warunek i β i 0. Podobnie jak w poprzednim punkcie, różniczkujemy po w, b oraz dodatkowo ξ otrzymując: L(w,b, ξ, α, β) w N =w α i y i d i =0 i= 1 N (4.2.19) w= α i y i d i i=1 L(w,b, ξ, α, β) b N = α i d i =0 (4.2.20) i=1 L(w,b, ξ, α, β) =C N α ξ i N β i N=0 α i +β i =C (4.2.21) Równania (4.2.19) oraz (4.2.20) nie różnią się od tych uzyskanych przy optymalizacji bez zmiennej relaksacyjnej. Z równania (4.2.21) możemy wywnioskować, że: 29 / 65
α i +β i =C i α i 0 i α i <C i β i 0 (4.2.22) Zatem podobnie jak w (4.2.10) problem do rozwiązania wygląda następująco: N N j=1 max L(α )= 1 2 i=1 pod warunkiem 0 α i C, i=1 α i α j y i y j d T N i d j + α i i=1 N α i d i =0 (4.2.23) Różnica wynika tylko z (4.2.22). Parametr b obliczany jest podobnie jak w (4.2.14) oczywiście z wyjątkiem indeksów, które nie spełniają zależności 0 α i C. Zauważmy, że przy założeniu C otrzymujemy problem analogiczny do omówionego w poprzednim rozdziale. 4.2.3 SVM z funkcją jądra Istnieje jeszcze inny sposób sprowadzenia problemu nieliniowej klasyfikacji do postaci liniowej. Poprzez dodanie nowego wymiaru oraz zdefiniowanie funkcji, która dokona mapowania punktów, możemy uzyskać przestrzeń liniowo separowalną. Mapowanie to nazywamy transformacją Φ. Φ Rysunek 9: Transformacja punktów za pomocą Φ. Na rysunku kolorem błękitnym oznaczono punkty w ramach których wykonano transformację. Punkty po transformacji oznaczono kolorem czerwonym. Nowe równanie możemy zapisać, korzystając z (4.2.9) jako: L(α )= 1 2 i= 1 N N j=1 N α i α j y i y j Φ(d i ) T Φ(d j )+ α i (4.2.24) i =1 Przekształcenie Φ jest bardzo skomplikowane. W tym celu zdefiniujmy funkcję jądra K: 30 / 65
K (d i, d j )=Φ(d i ) T Φ(d j ) (4.2.25) Celem jej wprowadzenie jest uwikłanie wprowadzania bezpośrednio Φ. Taką metodę nazywamy trikiem jądra (ang. kernel trick). Często spotykane funkcje jądra mają następującą postać: liniowa: wielomianowa rzędu p: K (d i, d j )=d i T d j (4.2.26) K (d i, d j )=(d i T d j +a) p (4.2.27) radialna funkcja bazowa (ang. radial basis function) z szerokością σ: sigmoidalna: K (d i, d j )=e d i d j 2 2 σ 2 (4.2.28) K (d i, d j )=tanh( κd i T d j +θ) (4.2.29) 31 / 65
5 Implementacja W niniejszym rozdziale zostaną omówione szczegóły związane z systemem implementującym interfejs aplikacji testującej programy klasyfikacji. Został on zaprojektowany z myślą o stworzeniu systemu umożliwiającego podłączanie dowolnego programu implementującego różne algorytmy klasyfikacji, a następnie wyświetlanie wyników ich wywołania w czytelnej i przyjaznej dla użytkownika formie. W celu uproszczenia pracy z takimi programami, powinna być również umożliwiona modyfikacja nie tylko parametrów wywołania programu, ale także samych zbiorów danych testowych. Opisywany program przydałby się analitykom oceniającym pracę takiego narzędzia w kontekście najlepszej optymalizacji dla wybranych zbiorów danych. W związku z tym z praktycznego względu powinna istnieć również możliwość generacji raportów wybranych wyników oraz sama ich archiwizacja w bazie danych. Omawiając rozwiązanie krok po kroku, na początku zostaną przedstawione aspekty technologiczne wykorzystywane w aplikacji, następnie architektura oraz komponenty i funkcje zaimplementowane w ramach projektu. W ostatnim rozdziale omówiono szczegółowe wymagania dotyczące interfejsu programu klasyfikacji, który jest podłączany do systemu testującego. 5.1 Technologia W zaimplementowanym programie wykorzystano następujące technologie: Glassfish [22], Java Persistence API, MySQL [23], JavaServer Faces z rozszerzeniem Primefaces, Maven [24], Enterprise JavaBeans, Context and Dependency Injection. Glassfish Jest to serwer aplikacji biznesowych umożliwiający proste udostępnianie i zarządzanie aplikacjami utworzonych przy użyciu technologii Java Enterprise. W projekcie skorzystano z wersji 4.* Java Persistence API Technologia stosowana w środowisku Java, w celach mapowania tabel w relacyjnych bazach danych na obiekty. W projekcie skorzystano z wersji 2.* MySQL Technologia bazodanowa zarządzająca bazą danych. Wszystkie dane dotyczące wyników klasyfikacji przetrzymywane są za pomocą tej technologii. W projekcie skorzystano z wersji 5.6.* 32 / 65
JavaServer Faces, Primefaces Za warstwę wizualną aplikacji odpowiedzialna jest technologia JavaServer Faces wraz z rozszerzeniem Primefaces. Jest to jedna z technologii wykorzystywanych i opisanych w specyfikacji w Javie Korporacyjnej (JEE). Głównym jej zadaniem jest mapowanie komponentów opisanych w plikach xhtml na pliki html obsługiwane przez przeglądarkę internetową. Maven Mechanizm służący do automatycznej budowy projektu. Upraszcza schemat zarządzania i uruchamiania projektu poprzez wygodny interfejs podłączania wtyczek, oraz umożliwia łatwy sposób instalowania zależności wykorzystywanych przy implementacji oraz uruchamiania programu. Enterprise JavaBeans, Context and Dependency Injection Kolejne technologie będące elementami specyfikacji JEE. Context and Dependency Injection (CDI) stosowane jest w celu poprawienia jakości kodu oraz rozdzielenia warstw aplikacji. 5.1.1 Opis zależności pomiędzy technologiami Klient internetowy Serwer Java EE Warstwa prezentacji Komponenty JavaBeans Strony internetowe, serwlety Warstwa biznesowa Komponenty JavaBeans Serwer bazodanowy Diagram 2: Warstwy aplikacji wraz z wyszczególnionymi technologiami Powyższy rysunek obrazuje kompozycję programu ze względu na zastosowane technologie w poszczególnych częściach aplikacji. Po kolei zostaną omówione poziomy aplikacji oraz cel i sposób zastosowania poszczególnych technologii, opisanych w poprzednim podpunkcie. Klient internetowy Składa się głównie z dwóch elementów: dynamicznych stron internetowych generowanych przez komponenty serwera Java EE, 33 / 65
przeglądarki internetowej. Powszechnie stosowana jest nazwa cienki klient. Cechą takich aplikacji jest brak bezpośredniej komunikacji z bazą danych, brak złożonych mechanizmów logiki biznesowej. Cała gama operacji wymagających zastosowania złożonych mechanizmów przeniesiona jest na stronę serwera. Taki schemat umożliwia łatwiejszą optymalizację oraz większe bezpieczeństwo. Serwer Java EE Serwer ze względu na technologie można podzielić na dwie kategorie: warstwa prezentacji (fasada, ang. front-end) oraz biznesową (wnętrze, ang. back-end). W celu utworzenia stron zastosowano technologię JavaServer Faces z rozszerzeniem Primefaces. Do walidacji i obsługi poprawności danych zastosowano mechanizmy CDI, które będąc lekkimi obiektami klas wywołują obiekty implementujące logikę, zawartą w kolejnej warstwie. Zamodelowano ją przy pomocy, podobnie jak w przypadku walidacji, mechanizmu CDI oraz w niektórych przypadkach EJB. Do komunikacji z bazą danych zastosowano technologię Java Persistence API. Serwer bazodanowy Baza danych, z którą komunikuje się aplikacja utworzona w ramach tej pracy została utworzona w technologii MySQL. 5.2 Architektura Diagram 3: Diagram komponentów aplikacji Powyższy diagram przedstawia ogólną strukturę programu. Odpowiednio analizując diagram od 34 / 65
lewej do prawej strony oznaczone zostały elementy warstwy prezentacji, warstwy logiki biznesowej oraz bazy danych i plików. 5.2.1 Warstwa prezentacji Raporty Komponent odpowiedzialny za zarządzanie z poziomu użytkownika raportami. Umożliwia wczytanie z bazy danych wszystkich zapisanych raportów, ich wizualne przedstawienie oraz pobranie raportów w postaci pliku tekstowego. Zawiera zdefiniowane tabele oraz wykresy, które przedstawiają wyniki wybranych i wykonanych testów. Przy wczytywaniu wykonywane są obliczenia miar, które następnie podobnie jak same dane zawarte w bazie są wizualizowane w formie wykresów i tabel. Testy Umożliwia uruchomienie i przeprowadzenie testu klasyfikacji. Poprzez komunikację z Menadżerem testów przekazuje argumenty wywołania programu oraz pobiera wynik zwrócony przez program. Wyświetla również strumień wyjściowy wywołanego programu. Podobnie jak w przypadku Raportów dane są wyświetlanie w formie tabeli oraz wykresu. Test nie może zostać uruchomiony jeżeli Menadżer systemu klasyfikacji nie będzie posiadał informacji o podłączonym programie. Po wykonaniu udanego testu, możliwy jest zapis otrzymanych wyników do bazy danych, wprowadzając wcześniej ich nazwę. Ustawienia Element odpowiedzialny za wyświetlanie możliwych programów klasyfikacji oraz podłączenie jednego, wybranego z nich. Wykorzystuje interfejs udostępniany przez Menadżer programu klasyfikacji. Po wczytaniu listy i wybraniu jednej z pozycji następuje poinformowanie użytkownika o zmianie obsługiwanego programu. Zbiory danych Komponent, którego celem jest zarządzanie zbiorem danych. Możliwe są następujące czynności: zapisanie lub wczytanie pliku zawierającego zbiory danych, eksport zbiorów danych do systemu klasyfikacji, dodawanie lub usuwanie elementów. 5.2.2 Warstwa logiki Generator raportów Jego głównym zadaniem jest tworzenie na podstawie zawartych w bazie danych informacji raportu dotyczącego wybranych wyników testowych. Po utworzeniu raportu możliwe jest jego ściągnięcie i zapisanie. Menadżer programu klasyfikacji Głównie pełni dwie funkcje: 35 / 65
zarządzanie wczytywaniem systemu (wyświetlanie możliwych systemów do podłączenia i wczytywanie wybranego), udostępnianie informacji dotyczących konfiguracji systemu zawartych w pliku konfiguracyjnym. W procesie instalacji programu, użytkownik definiuje miejsce na dysku, z którego wczytywane zostaną możliwe programy. Następnie wszystkie pliki o rozszerzeniu jar z podanego katalogu zostają dodane jako możliwe do wczytania. Wczytanie programu oznacza zaimportowanie dynamiczne klasy znajdującej się w określonym pakiecie oraz utworzenie dynamiczne obiektu tej klasy. Zasady podłączenia programów zostały umieszczone w rozdziale 5.4. Udostępnianie konfiguracji nie jest elementem koniecznym do spójnego działania systemu. Menadżer testów Pełni rolę zapisywania oraz przeprowadzania testów. Korzystając z wcześniej wczytanego obiektu klasyfikatora, wywołuje metodę process z określonym argumentami umożliwiającą przeprowadzenie testów. Następnie wczytuje dane oraz udostępnia je warstwie prezentacji. W przypadku wybrania zapisu, komunikuje się z komponentem odpowiedzialnym za dostęp do bazy danych. Dostęp do bazy danych Umożliwia wykonywanie operacji wczytywania testów oraz zapisu. Korzysta z obiektów reprezentujących encje z bazy danych. Kalkulator miar Po wczytaniu elementów z baz danych konieczna jest interpretacja wyników. W tym celu komponent kalkulator miar tworzy obiekty reprezentujące ocenione według miar wyniki i udostępnia ich wartości. W ten sposób uzyskane dodatkowe informacje rozszerzają dane pobrane z bazy danych. Menadżer zbioru danych Komponent odpowiedzialny za wykonywanie operacji zapisu, wczytywania, eksportu oraz modyfikacji zbiorów testowych. 5.2.3 Baza danych i plików Baza danych Zawiera informacje o przeprowadzonych testach. Program klasyfikacji Zawiera listę programów wykorzystywanych przez aplikację internetową. Każdy z tych programów powinien mieć ustandaryzowany interfejs umożliwiający wywołanie programu. Więcej w rozdziale 5.4. 36 / 65
Konfiguracja systemu Plik zawierający istotne informacje do eksportu zbioru danych oraz argumentów programu. Nie jest obligatoryjną częścią systemu. System plików Ogólnie rozumiana przestrzeń pamięci dyskowej komputera. Stosowana w kontekście zapisu i wczytywania plików wybranych przez użytkownika oraz struktury katalogowej przygotowanej do eksportu zbioru danych. 5.3 Funkcje programu W tym rozdziale zostały omówione główne zaimplementowane funkcje systemu w ramach projektu aplikacji internetowej. Do każdego opisu dołączono zdjęcia przedstawiające prezentację i realizację w kontekście samej aplikacji. Pod koniec, w niektórych przypadkach, dodano również krótką informację, w jaki sposób można odtworzyć podaną funkcję. 5.3.1 Przeprowadzanie testów Główna funkcja realizuje przebieg przeprowadzania testów klasyfikacji. Istnieją dwie metody wywołania programu podłączonego jako system klasyfikacji: 1. Poprzez wywołanie z konsoli: Ilustracja 1: Wywołanie programu klasyfikacji przez podanie argumentów. 2. Poprzez pregenerowaną formatkę: Ilustracja 2: Wywołanie programu klasyfikacji przez formatkę. Pierwszy punkt to nic innego, jak wywołanie programu poprzez wprowadzenie w odpowiedniej kontrolce argumentów wywołania programu. Drugi punkt jest nieco bardziej skomplikowany. W momencie wczytania systemu klasyfikacji (pliku o rozszerzeniu jar) aplikacja wyszukuje plik o wczytanej nazwie, ale rozszerzeniu xml. Ten plik konfiguruje dwa elementy: format wczytywania danych, ścieżka eksportu zbiorów danych. Plik konfiguracyjny format wczytywania danych W tym punkcie omówimy pierwszy przypadek, konfigurację wczytywania danych. Każdy z argumentów posiada przypisane do niego zapytanie (węzeł question) oraz priorytet (węzeł 37 / 65
priority), opisujący miejsce znajdowania się argumentu. Istnieją dwa typy argumentów: enumeryczny (zapisywany jako węzeł list) oraz numeryczny (zapisywany jako węzeł numeric). Węzeł enumeryczny reprezentowany jest jako lista z możliwością wyboru jednego argumentu. Węzeł values zawiera wszystkie możliwe wartości tego argumentu (odpowiednio pojedyncza wartość to węzeł value). Poniżej zamieszczono przykład opisu argumentu w pliku oraz jego wygląd w programie: <list> <question> Typ stron internetowych </question> <values> <value>univ</value> <value>home</value> </values> <priority>1</priority> </list> Przykład 1: Definicja węzła enumerycznego Ilustracja 3: Wygląd węzła enumerycznego w aplikacji Węzeł numeryczny reprezentowany jest jako pole, w którym można wprowadzić liczbę. Węzły min oraz max opisują minimalną oraz maksymalną możliwą do wprowadzenia wartość. Przykład opisu argumentu: 38 / 65
<numeric> <question> Ilosc przykladow pozytywnych i negatywnych </question> <min>0</min> <max>500</max> <priority>2</priority> </numeric> Przykład 2: Definicja węzła numerycznego Ilustracja 4: Wygląd węzła numerycznego w aplikacji Opis przeprowadzania testów Wybieramy zakładkę Testy, w której wprowadzamy odpowiednie wartości wywołania w podany poprzednio sposób. Następnie wybieramy opcję Zatwierdź. Wyniki przeprowadzenia testu zostają przedstawiane w formie tabelarycznej oraz wykresu. 5.3.2 Prezentacja wyników przeprowadzonego testu Prezentacja wyników dotyczy zakładek Testy oraz Raporty. W przypadku pierwszej zakładki, aplikacja po przeprowadzeniu testów wyświetla wynik, uwzględniając różne wybrane tryby (w poniższych wynikach tryby utożsamiane są z reprezentacją danych w klasyfikatorach). W zakładce Raporty dla wybranych zapisanych wyników w bazie danych, wyświetlane są informacje dotyczące obliczonych metryk oraz danych. Wykres kołowy danych dla przeprowadzonego testu 39 / 65
Ilustracja 5: Wykres kołowy testu klasyfikatora Bayes dla reprezentacji częstotliwościowej. Za pomocą strzałek można zmieniać wyświetlany tryb. Diagram prezentuje procent zakwalifikowanych poprawnie oraz niepoprawnie obserwacji pozytywnych, negatywnych oraz wszystkich. Dodatkowo uwzględniane są przypadki niezaklasyfikowane. Tabela danych dla przeprowadzonego testu Ilustracja 6: Tabela danych klasyfikatora Bayes dla reprezentacji binarnej. Podobnie jak dla ilustracji 5 zawiera dane klasyfikacji, tym razem w formie wykresu. Zostały 40 / 65
dodane dane dotyczące liczebności (mocy) zbioru oraz liczby pozytywnie i negatywnie zaklasyfikowanych przykładów. Tabela danych wybranych zapisanych przeprowadzonych testów Ilustracja 7: Tabela danych dla wybranych wyników klasyfikacji. Przedstawia ilość sklasyfikowanych danych, korzystając z nazewnictwa przedstawionego w rozdziale 3.5.1. Tabela miar wybranych przeprowadzonych testów Ilustracja 8: Tabela miar dla wybranych wyników klasyfikacji. Korzysta z miar z rozdziału 3.5.2 Diagram miar wybranych przeprowadzonych testów Ilustracja 9: Diagram miar dla wybranych wyników klasyfikacji 5.3.3 Zapis wyniku testu do bazy danych Po przeprowadzeniu testu otrzymujemy wyniki, które następnie mogą zostać zapisane do bazy danych. Sam zapis jest potwierdzany po przeprowadzeniu testu w zakładce Testy poprzez wybranie opcji Zapisz dane. Następnie zapisane uprzednio wyniki możemy przejrzeć po 41 / 65
wybraniu opcji z menu Raporty. 5.3.4 Generowanie i zapis raportu z testów Po wybraniu opcji Raporty i zaznaczeniu odpowiednich wyników testów, istnieje możliwość wygenerowania pliku w formacie txt zawierającego informacje o przeprowadzonych testach. Oto wygląd przykładowego raportu testowego. testtest2 TF Data: True Positive - 259, False Positive - 7, True Negative - 222, False Negative - 12, Not Classified Positive - 0, Not Classifeid Negative - 0, Measures: Accuracy - 0.962, Precision - 0.9736842, Sensitivity - 0.95571953, F-measure - 0.9646182, Przykład 3: Przykładowy raport z klasyfikacji. 5.3.5 Wczytywanie programu klasyfikacji Po wybraniu z menu opcji Ustawienia istnieje możliwość zaimportowania odpowiedniego pliku o rozszerzeniu jar. Po kliknięciu Wczytaj listę programów klasyfikacji następuje aktualizacja listy systemów klasyfikacji możliwych do zaimportowania. W pliku resources.properties zawarta jest lokalizacja folderu, z którego aktualizowane są systemy klasyfikacji. Po wybraniu z wyświetlonej listy jednego elementu oraz kliknięcie przycisku Zatwierdź program, zostaje wykonany import programu do systemu. 5.3.6 Modyfikacja oraz eksport zbioru przypadków testowych W zakładce Zbiory danych istnieje możliwość modyfikacji zbioru danych testowych. W lewej kolumnie zawarte są pozytywne przykłady testowe, w prawej zaś negatywne. Dodawanie przypadku testowego Wprowadzając wartość elementu w pole i wybierając odpowiednio opcje Dodaj do zbioru pozytywnego lub Dodaj do zbioru negatywnego dodajemy wpisaną wartość do zbiorów przypadków odpowiednio pozytywnych lub negatywnych. Ilustracja 10: Wprowadzanie wartości do zbioru testowego. 42 / 65
Usuwanie przypadku testowego Przy każdej liście przypadków testowych umieszczono pole wyboru, które można zaznaczyć. Każdy element zaznaczony w ten sposób zostaje usunięty po wybraniu przycisku Usuń zaznaczone. Ilustracja 11: Usuwanie elementów ze zbioru przypadków testowych. Eksport przypadków testowych Wybranie przycisku Eksportuj do programu powoduje wyeksportowanie zbioru danych do programu zgodnie z konfiguracją zamieszczoną w pliku xml importowanym przy wczytywaniu systemu klasyfikacji. Plik konfiguracyjny ścieżka eksportu zbiorów danych opcja 1 pozytywne ścieżka opcja 2 negatywne opcja n-ta Diagram 4: Struktura plików zawierających dane zbiorów testowych 43 / 65