KATEDRA SYSTEMÓW MULTIMEDIALNYCH
Inteligentne Systemy Decyzyjne
Ćwiczenie nr 8:
Klasyfikacja sygnałów z wykorzystaniem SVM
Opracowanie:
mgr inż. Adam Kupryjanow
1. Wprowadzenie
Maszyna wektorów nośnych (ang. Support Vector Machine, SVM) jest stosunkowo młodą techniką służącą do klasyfikacji różnego typu danych. Została ona zaproponowana przez Vapnika na początku lat 90-tych XX wieku [5]. W większości przypadków jest techniką prostszą w wykorzystaniu oraz dającą wyższą skuteczność klasyfikacji niż sztuczne sieci neuronowe. W odróżnieniu od sztucznych sieci neuronowych dla jednego zbioru danych (przy stałych parametrach klasyfikatora) klasyfikator SVM zostanie wytrenowany w ten sam sposób (co oznacza, że pozwala na uzyskanie tej samej skuteczności klasyfikacji). Skuteczne wykorzystanie maszyny wektorów nośnych wymaga zrozumienia podstaw tej metody, gdyż bez tej wiedzy uzyskanie wysokiej skuteczności klasyfikacji jest trudne.
2. Cel i przebieg ćwiczenia
Celem ćwiczenia jest zapoznanie studenta z podstawami klasyfikacji danych z wykorzystaniem metody SVM. Wszystkie ćwiczenia wykonane zostaną z wykorzystaniem programu Matlab oraz darmowej biblioteki libSVM (http://www.csie.ntu.edu.tw/~cjlin/libsvm/) wraz z matlabowym interfejsem udostępnionym na stronie biblioteki libSVM. Biblioteki libSVM została napisana w języku c++, a swoją
popularność zawdzięcza faktowi, iż zostały w niej uwzględnione wszystkie istotne algorytmy związane a maszyną wektorów nośnych. Powstały także różne interfejsy umożliwiające korzystanie z niej w językach i aplikacjach takich jak c#, Java, WEKA.
3. SVM - podstawy
U podstaw teorii metody SVM leżą złożone teorie matematyczne, które nie zostaną przedstawione w tej instrukcji. Szczegółowy opis matematyczny algorytmu dostępny jest m.in. w dokumentacji biblioteki libSVM [1-4] oraz w wielu innych publikacjach [5]. W tym dokumencie klasyfikator SVM został opisany w sposób ogólny, pozwalający na zrozumienie zasady jego działania.
Metoda SVM należy do grupy algorytmów, które do poprawnego działania wymagają przeprowadzenia fazy treningu, oraz w celu wyznaczenia ich skuteczności, fazy testowania. Jest to technika pozwalająca na rozróżnienie dwóch klas danych, które zazwyczaj opisywane są jako klasa -1 i 1. Znane są także metody pozwalające na klasyfikację wielu klas. Polegają one na zastosowaniu wielu klasyfikatorów umieszczonych równolegle, z których każdy ma za zadanie rozpoznanie jednej z klas danych. Końcowa decyzja podejmowana jest z wykorzystanie algorytmu głosowania większościowego.
Podczas treningu, typowego klasyfikatora, zbiory parametrów są mapowane na wartości z przestrzeni o wyższym wymiarze (czasem nieskończonym). Parametry należące do jednej klasy oddzielane są w ten sposób od parametrów drugiej klasy poprzez stworzenie płaszczyzny wielowymiarowej zwanej hiperpłaszczyzną. Ilość wymiarów płaszczyzny zależy od ilości parametrów opisujących klasy oraz od parametrów i rodzaju funkcji jądra (ang.
kernel function).
Podstawowe funkcje jądra to:
liniowa: j T i j i x x x x K( , ) polynomial: K(xi,xj)(xiTxj r)d, 0
radial basis function (RBF): K(xi,xj)exp( xi xj 2), 0
sigmoid: K(x,x ) tanh( x xj r)
T i j
i
gdzie , r, i d, są parametrami funkcji jądra.
Na przestrzeni lat powstało wiele algorytmów pozwalających na trenowanie i klasyfikowanie danych oparte na klasyfikatorze SVM. Najpopularniejsze algorytmy zostały wymienione poniżej. W nawiasach podano skrócone nazwy używane w bibliotece libSVM.
C-Support Vector Classification (C-SVC) [6][7]
v-Support Vector Classification (nu-SVC) [8]
one-class SVM (one-class SVM) [9]
є-Support Vector Regression (epsilon-SVR) [10]
v-Support Vector Regression (nu-SVR) [9]
Podobnie jak w algorytmie sztucznych sieci neuronowych w klasyfikatorze SVM występuje problem nadmiernego dopasowania danych treningowych. Problem ten pojawia się wtedy gdy dąży się do uzyskania jak najwyższej skuteczności klasyfikacji danych a parametry SVM dobierane są dla jednego zbioru danych. Przykład nadmiernego dopasowania klasyfikatora pokazano na rysunkach 1a i 1b. Rozwiązaniem tego problemu może być zastosowanie kross walidacji. Wyniki trenowania i testowania klasyfikatora z zastosowaniem kross-walidacji przedstawiono na rysunku 1c i 1d.
a) b)
c) d)
Rysunek 1. a) nadmierne dopasowanie klasyfikatora –trenowanie, b) nadmierne dopasowanie klasyfikatora –testowanie, c) prawidłowe uogólnienie klasyfikator – trenowanie, d)
prawidłowe uogólnienie klasyfikator – testowanie [2].
Podczas zajęć problem do klasyfikacji będzie polegał na rozpoznawania chodu na podstawie analizy sygnałów pochodzących z trójosiowego akcelerometru umieszczonego na lewej nodze osoby badanej. W nagraniach wzięło udział 17 ochotników. Zarejestrowane sygnału zostały podzielone na dwie klasy ruchu: chód i brak chodu. Zostały one poddane parametryzacji polegającej na wyznaczeniu: wartości średniej sygnału, odchylenia standardowego, kurtozy, energii widmowej, współczynnika szczytu, entropii widmowej oraz współczynnika korelacji sygnałów z różnych osi akcelerometrów. Wartości te wyznaczane są dla sygnału podzielonego na okna o długości 1s przesuwanego ze skokiem 0.5 s.
Na potrzeby ćwiczenia został stworzony skrypt svm_test.m pozwalający na wykonanie treningu i klasyfikacji sygnałów z wykorzystaniem różnych parametrów klasyfikatora oraz z użyciem różnych metod testowania.
4. Zadania do wykonania
Uwaga! Przed rozpoczęciem ćwiczenie należy wygenerować dane do klasyfikacji
korzystając z funkcji generuj_dane. Funkcja ta wygeneruje parametry dla 8 losowo wybranych osób ze zbioru i zapisze je w plik data.mat.
1. Znaleźć optymalnych parametry klasyfikatora SVM gamma oraz C dla treningu z kross walidacją 5 (type = 2, ratio =1, v=’5’), funkcją jądra RBF i algorytmem treningu C-SVC. Należy sprawdzić wszystkie kombinacje gamma i C, gdzie gamma powinna przyjmować wartości {2-5
, 2-4, 2-3, 2-2, 2-1, 20, 21}, a C {2-1, 21, 23, 25, 27, 29, 211, 213, 215,}. Zanotować skuteczności oraz czas obliczeń.
2. Dla siedmiu najlepszych kombinacji parametrów C i gamma sprawdzić skuteczność klasyfikacji przy testowaniu z wykorzystaniem metody leave-one-out (type =1). Przy czym najlepsze skuteczności należy wybrać dla gamma = {2-5 , 2-4, 2-3, 2-2, 2-1, 20, 21}. W przypadku kilku jednakowych wartości skuteczności dla różnych wartości C należy wybrać tą z niższą wartością C. Zanotować wyniki klasyfikacji dla każdej z osób oraz wynik sumaryczny.
3. Dla najlepszego klasyfikatora z punktu 2 sprawdzić skuteczność klasyfikacji dla następujących funkcji jądra: liniowa, polinomial, sigmoid testując. Zanotować wyniki klasyfikacji dla każdej z osób oraz wynik sumaryczny.
5. Opracowanie
Uwaga ! Uzyskane wyniki przedstawić w sposób przejrzysty i czytelny.
1. Sporządzić wykres zależności parametru C od skuteczności dla stałych wartości gamma (dla wyników uzyskanych w zadaniu 1) oraz skomentować uzyskane wyniki. Odpowiedzieć na pytanie jaka jest interpretacja parametrów C i gamma. (Odpowiedź można znaleźć m.in. w literaturze podanej w bibliografii)
2. Przeanalizować i skomentować wyniki uzyskane w zadaniu 2. W szczególności powód spadku skuteczności klasyfikacji.
3. Przeanalizować i skomentować wyniki uzyskane w zadaniu 3. Odpowiedzieć na pytanie, która funkcja jądra jest najodpowiedniejsza dla tego problemu klasyfikacji. Dlaczego?
Bibliografia
[1] http://www.csie.ntu.edu.tw/~cjlin/libsvm/
[2] C. Hsu, C. Chang, C. Lin, “A practical guide to Support Vector Classification”, April 2010, Taiwan. (http://www.csie.ntu.edu.tw/~cjlin/papers/guide/guide.pdf)
[3] R. Fan, P. Chen, C. Lin, “Working set selection using second order information using for training support vector machine”. (http://www.csie.ntu.edu.tw/~cjlin/papers/quadworkset.pdf [4] C. Chang, C. Lin, “LIBSVM: a library for support vector machine”, March 2010. (http://www.csie.ntu.edu.tw/~cjlin/papers/libsvm.pdf)
[5] V. Vapnik, “The Nature of Statistical Learning Theory”, Springer, 1995
[6] B. E. Boser, I. Guyon, V. Vapnik. “A training algorithm for optimal margin classifiers”. In Proceedings of the Fifth Annual Workshop on Computational Learning Theory, pages 144-152. ACM Press, 1992.
[7] C. Cortes, V. Vapnik, “Support-vector network. Machine Learning”, 20:273-297, 1995.
[8] J. Platt, “Probabilistic outputs for support vector machines and comparison to regularized likelihood methods”, In A. Smola, P. Bartlett, B. Scholkopf, and D. Schuurmans, editors, Advances in Large Margin Classifiers, Cambridge, MA, 2000. MIT Press. URL citeseer.nj.nec.com/platt99probabilistic.html.
[9] B. Scholkopf, J. C. Platt, J. Shawe-Taylor, A. J. Smola, and R. C. Williamson, “Estimating the support of a high-dimensional distribution, Neural Computation”, 13(7):1443-1471, 2001. [10] V. Vapnik, “Statistical Learning Theory”, Wiley, New York, NY, 1998.