Sieci neuronowe i neurokomputery - PROJEKT 2008
Student |
Grupa |
Ocena |
Data |
Podpis |
Jan Dudziec |
T-TIZ5 |
|
9.01.2008
|
|
Cel
Zaprojektować klasyfikator neuronowy dla 3 klas.
Opis i wizualizacja danych
Zbiory danych dostarczone zostały w plikach snn_a.txt oraz snn_b.txt. Pierwszy z nich stanowi zbiór testowy (200 przykładów), natomiast drugi jest zbiorem uczącym (800 przykładów). Każdy element zbioru zawiera 2 parametry wejściowe o wartościach liczbowych oraz etykietę klasy do której należy. Umożliwia to wizualizację za pomocą punktów na płaszczyźnie.
Poniższe wykresy przedstawiają obrazy zbiorów:
uczącego
testowego
całkowitego
gdzie identyfikator przydzielonej klasy określa kolor punktu (czerwony - 1, zielony - 2, niebieski - 3).
|
|
-- Analiza zbioru uczacego -- Ilosc elementow nalezacych do klasy 1: 289 Ilosc elementow nalezacych do klasy 2: 275 Ilosc elementow nalezacych do klasy 3: 236
|
-- Analiza zbioru testujacego -- Ilosc elementow nalezacych do klasy 1: 72 Ilosc elementow nalezacych do klasy 2: 76 Ilosc elementow nalezacych do klasy 3: 52
|
|
|
suma zbiorów
-- Analiza sumy zbiorów --
Ilosc elementow nalezacych do klasy 1: 361
Ilosc elementow nalezacych do klasy 2: 351
Ilosc elementow nalezacych do klasy 3: 288
Na podstawie tych wykresów można wyodrębnić 3 grupy punktów należących do różnych klas, które nie posiadają części wspólnych w żadnym obszarze.
Zastosowany algorytm uczenia sieci neuronowej; i opis zastosowanego programu komputerowego (środowisko, język programowania, procedury numeryczne i graficzne, interfejs użytkownika)
Do uczenia sieci neuronowej wykorzystano algorytm gradientowy wstecznej propagacji błędów BP (200 epok) a następnie algorytm Levenberga-Marquardta LM (300 epok).
Ze względu na wygodę implementacji oraz wizualizacji wyników projekt wykonano w środowisku MATLAB (wer. 7.1) z wykorzystaniem biblioteki Neural Network Toolbox.
Do otrzymania sieci z wsteczną propagacją błędu użyto funkcji newff. Wszelkie właściwości tej sieci, takie jak rozmiary warstw i wagi początkowe, dostępne są poprzez odpowiednie pola składowe utworzonego obiektu. Do trenowania i testowania sieci wykorzystano zawarte w toolboxie odpowiednie m-funkcje: train oraz sim. Algorytmy uczenia dostępne są pod postacią następujcych funkcji: BackPropagation trainbp, Levenberg-Marquardta trainlm.
Projekt składa się z następujących funkcji:
wczytaj_dane()
Funkcja wczytuje dane z plików snn_a.txt i snn_b.txt i zapamiętuje je jako macierze w programie MATLAB.
wizualizacja_danych()
Funkcja prezentująca graficzną i statystyczną analizę danych uczących i testowych sieci. Wykorzystuje funkcję badanie_zbioru.
symulacja()
Główna funkcja projektu, uruchamiana bez dodatkowych parametrów. Wykorzystując pozostałe m-pliki, buduje sieć neuronową w oparciu o dane z pliku z danymi uczącymi i prezentuje wyniki przeprowadzonych na niej doświadczeń z wykorzystaniem danych z pliku z danymi testowymi.
siec = tworz_siec_1K(zbior_uczacy)
Konstrukcja i trenowanie sieci. Jako parametry należy przekazać zbiór uczący. Zwracane obiekty to utworzone sieć jako 1 klasyfikator.
[siec1, siec2, siec3] = tworz_siec_NK(zbior_uczacy)
Konstrukcja i trenowanie sieci. Jako parametry należy przekazać zbiór uczący. Zwracane obiekty to utworzone sieci jako N=3 klasyfikatorów.
badanie_zbioru(zbior, wzor)
Funkcja pomocnicza, dokonuje graficznej iterpretacji przekazanego zbioru i wyświetla informacje o ilości elementów w poszczególnych klasach. W przypadku przekazania drugiego parametru, który stanowi porównywany zbiór odniesienia, na wykresie zostają naznaczone różnice oraz wyświetlona zostaje tabela z wynikiami poprawności klasyfikacji.
konwersja(dane)
Funkcja konweruje dane uzyskane z K neuronów wyjściowych na pojedyncze etykiety przynależności do klasy.
drukuj_siec(siec, nazwa_pliku)
Pobiera informacje o sieci i zapisuje je w formacie określonym w specyfikacji do projektu.
Wynikiem działania programu (polecenie start) jest otrzymanie kolejno:
wczytanie danych
analizy zbioru uczącego i testującego
tabeli wartości wag klasyfikatora neuronowego
analizy graficznej funkcji realizowanej przez sieć neuronową
wykresu obrazującego wynik działania klasyfikatora na zbiorze uczącym i testowym z zaznaczeniem linii podziału obszarów
tabeli zawierających wyniki klasyfikacji dla zbioru uczącego i testowego
pliku tekstowego z bieżącą konfiguracją sieci w formacie określonym w specyfikacji do projektu
Udokumentowanie wyboru architektury sieci (liczby neuronów wejściowych i ukrytych) i najlepszego modelu spośród sieci o tej samej liczbie neuronów ukrytych.
Zgodnie z postawionymi założeniami projektowymi tego zadania, konfiguracja sieci miała opierać się na perceptronie dwuwarstwowym z jedną warstwą neuronów ukrytych z funkcją aktywacji neuronów w postaci
.
Jeden klasyfikator o K neuronach wyjściowych
Mininalną liczbę potrzebnych neuronów warstwy ukrytej można ocenić, wiedząc że 1 neuron ukryty odpowiada za 1 prostą decyzyjną dokonującą podziału płaszczyzny na dwie półpłaszczyzny o różnie zaklasyfikowanych punktach. Na podstawie analizy rozkładu danych wejściowych stwierdzono, że minimalna i zarazem optymalna liczba neuronów warstwy ukrytej wynosi 4. Poniżej przedstawiono wykresy punktow zbioru testowego z odrecznie nakreślonymi prostymi podziału dla zbiorów testowego i uczącego.
|
|
a) zbiór testowy |
a) zbiór uczący |
Ponieważ klasy nie posiadają części wspólnej, dość łatwo jest określić optymalną ilość neuronów w warstwie ukrytej. Wielokrotnie wykonane doświadczenia dla innych ich ilości (4 do 10) wykazują jednak, że nie następuje zauważalna poprawa jakości klasyfikacji sieci dla wartości innych niż 4. Wybór 4 neuronów zapewnia szybszy czas uczenia się sieci, ale przede wszystkim nie powoduje niepożądanego zjawiska overfittingu, nadając sieci charakter bardziej generalizujący. 3 neurony w warstwie ukrytej nie są w stanie poprawnie zaklasyfikować wszystkich danych.
Liczba neuronów ukrytych |
Sprawność na danych uczących [%] |
Sprawność na danych testowych [%] |
3 |
89 |
94 |
4 |
99 |
99 |
5 |
99 |
98 |
6 |
99 |
98 |
7 |
89 |
85 |
8 |
94 |
90 |
9 |
96 |
92 |
10 |
96 |
90 |
Wyjście sieci zrealizowano według koncepcji jednego klasyfikatora o 3 neuronach wyjściowych z zastosowaniem kodowania „1 z K”. Sygnał na wyjściu neuronu k o sigmoidalnej funkcji aktywacji (po przeprowadzeniu uczenia) można interpretować jako prawdopodobieństwo a posteriori, że wektor wejściowy x należy do klasy Ck.
K niezależnych klasyfikatorów binarnych z jednym neuronem wyjściowym
Na podstawie analizy danych wejściowych budując K=3 niezależnych klasyfikatorów stwierdzono, że:
Klasyfikator klasy 1 powinien mieć minimalnie 3 neurony ukryte
Klasyfikator klasy 2 powinien mieć minimalnie 3 neurony ukryte
Klasyfikator klasy 3 powinien mieć minimalnie 4 neurony ukryte
Odręcznie nakreślone linie podziału wyglądają następująco:
Klasyfikator dla klasy 1
Klasyfikator dla klasy 2
Klasyfikator dla klasy 3
Kilkuktornie powtarzane symulacjedla innych ich ilości neuronów wykazują, że nie następuje zauważalna poprawa jakości klasyfikacji. Wybór 3, 3 i 4 neuronów zapewnia szybszy czas uczenia się sieci i nie powoduje zjawisk ubocznych, pozwalając zwiększyć własności generalizacyjne sieci.
Wyjście każdej sieci zrealizowano według koncepcji klasyfikatora binarnego. Sygnał na wyjściu neuronu Ktej sieci o sigmoidalnej funkcji aktywacji (po przeprowadzeniu uczenia) można interpretować jako prawdopodobieństwo a posteriori, że wektor wejściowy x należy do klasy Ck.
Schemat zaprojektowanego klasyfikatora neuronowego (K klasyfikatorów binarnych lub jeden klasyfikator).
Schemat przedstawia realizację klasyfikatora w postaci jednej sieci realizującej funkcję 1 z K.
Tabele wartości wag klasyfikatora neuronowego
Wagi na połączeniach między kolejnymi neuronami. Oznaczenie neuronu postaci A-B oznacza, że leży w warstwie A (0 odpowiada warstiwe wejściowej, 1 pierwszej ukrytej, a 2 wyjściowej) i jest neuronem o indeksie B w teje warstwie (licząc od 1). Dlatego tabela obrazuje połączenia między warstwą wejściową a pierwszą ukrytą oraz pierwszą ukrytą a wyjściową.
Wartości progów klasyfikacji wynoszą theta=0.5, ponieważ klasy nie posiadają części wspólnych.
Jeden klasyfikator o K neuronach wyjściowych
Neuron |
0-1 |
0-2 |
1-1 |
1-2 |
1-3 |
1-4 |
1-1 |
-7.003813 |
-0.318866 |
--- |
--- |
--- |
--- |
1-2 |
-3.427060 |
-0.060671 |
--- |
--- |
--- |
--- |
1-3 |
-1.677563 |
-1.375361 |
--- |
--- |
--- |
--- |
1-4 |
-0.806385 |
0.379907 |
--- |
--- |
--- |
--- |
2-1 |
--- |
--- |
-13.739263 |
11.180162 |
8.768604 |
14.344750 |
2-2 |
--- |
--- |
4.088632 |
-10.648118 |
3.747598 |
-2.395713 |
2-3 |
--- |
--- |
11.125530 |
-2.147691 |
-10.971338 |
-11.533081 |
K niezależnych klasyfikatorów binarnych z jednym neuronem wyjściowym
Klasyfikator Klasy 1
Neuron |
0-1 |
0-2 |
1-1 |
1-2 |
1-3 |
1-1 |
-8.231783 |
0.360053 |
--- |
--- |
--- |
1-2 |
-34.813196 |
-1.635618 |
--- |
--- |
--- |
1-3 |
-2.557999 |
1.508543 |
--- |
--- |
--- |
2-1 |
--- |
--- |
2.782433 |
-4.055699 |
4.163224 |
Klasyfikator Klasy 2
Neuron |
0-1 |
0-2 |
1-1 |
1-2 |
1-3 |
1-1 |
3.782993 |
-0.164112 |
--- |
--- |
--- |
1-2 |
-0.566249 |
0.003947 |
--- |
--- |
--- |
1-3 |
-10.550431 |
-9.867407 |
--- |
--- |
--- |
2-1 |
--- |
--- |
5.591917 |
14.121327 |
4.111324 |
Klasyfikator Klasy 3
Neuron |
0-1 |
0-2 |
1-1 |
1-2 |
1-3 |
1-4 |
1-1 |
0.150947 |
0.021401 |
--- |
--- |
--- |
--- |
1-2 |
-2.266919 |
-0.094239 |
--- |
--- |
--- |
--- |
1-3 |
-1.589668 |
0.781488 |
--- |
--- |
--- |
--- |
1-4 |
-13.576800 |
-9.975408 |
--- |
--- |
--- |
--- |
2-1 |
--- |
--- |
-6.520389 |
8.452865 |
-5.142647 |
-4.944301 |
Wyniki klasyfikacji
Jeden klasyfikator o K neuronach wyjściowych
dla zbioru uczącego
|
procent / liczba punktów zaklasyfikowanych poprawnie |
procent / liczba punktów zaklasyfikowanych niepoprawnie |
procent / liczba punktów niezaklasyfikowanych |
klasa 1 |
97.58% / 282 |
1.04% / 3 |
1.38% / 4 |
klasa 2 |
99.64% / 274 |
0.00% / 0 |
0.36% / 1 |
klasa 3 |
97.03% / 229 |
1.69% / 4 |
1.27% / 3 |
ogółem |
98.13% / 785 |
0.88% / 7 |
1.00% / 8 |
dla zbioru testowego
|
procent / liczba punktów zaklasyfikowanych poprawnie |
procent / liczba punktów zaklasyfikowanych niepoprawnie |
procent / liczba punktów niezaklasyfikowanych |
klasa 1 |
100.00% / 72 |
0.00% / 0 |
0.00% / 0 |
klasa 2 |
97.37% / 74 |
0.00% / 0 |
2.63% / 2 |
klasa 3 |
92.31% / 48 |
7.69% / 4 |
0.00% / 0 |
ogółem |
97.00% / 194 |
2.00% / 4 |
1.00% / 2 |
wizualizacja otrzymanych wyników - linie rozdzielające klasy i ich związek z architekturą i wagami sieci neuronowej, wykres funkcji realizowanej przez sieć neuronową.
Punkty na wykresach prezentowane są w 3 kolorach, przedstawiających klasy do jakich należą. Jeżeli punkt został poprawnie sklasyfikowany to jego reprezentacja się nie zmienia. Jeśli został błędnie sklasyfikowany to otoczony jest czerwonym kwadratem. Jeżeli nie został sklasyfikowany to prezentowany jest jako niebieskie kółko.
Funkcja realizowana przez sieć
Wynik działania klasyfikatora na zb. tesotwym z liniami podziału
Wyniki klasyfikacji na zbiorze uczącym
Wyniki klasyfikacji na zbiorze testowym
K niezależnych klasyfikatorów binarnych z jednym neuronem wyjściowym
dla zbioru uczącego
|
procent / liczba punktów zaklasyfikowanych poprawnie |
procent / liczba punktów zaklasyfikowanych niepoprawnie |
procent / liczba punktów niezaklasyfikowanych |
klasa 1 |
95.16% / 275 |
0.00% / 0 |
4.84% / 14 |
klasa 2 |
100.00% / 275 |
0.00% / 0 |
0.00% / 0 |
klasa 3 |
99.15% / 234 |
0.00% / 0 |
0.85% / 2 |
ogółem |
98.00% / 784 |
0.00% / 0 |
2.00% / 16 |
dla zbioru testowego
|
procent / liczba punktów zaklasyfikowanych poprawnie |
procent / liczba punktów zaklasyfikowanych niepoprawnie |
procent / liczba punktów niezaklasyfikowanych |
klasa 1 |
88.89% / 64 |
0.00% / 0 |
11.11% / 8 |
klasa 2 |
100.00% / 76 |
0.00% / 0 |
0.00% / 0 |
klasa 3 |
96.15% / 50 |
0.00% / 0 |
3.85% / 2 |
ogółem |
95.00% / 190 |
0.00% / 0 |
5.00% / 10 |
wizualizacja otrzymanych wyników - linie rozdzielające klasy i ich związek z architekturą i wagami sieci neuronowej, wykres funkcji realizowanej przez sieć neuronową.
Punkty na wykresach prezentowane są w 3 kolorach, przedstawiających klasy do jakich należą. Jeżeli punkt został poprawnie sklasyfikowany to jego reprezentacja się nie zmienia. Jeśli został błędnie sklasyfikowany to otoczony jest czerwonym kwadratem. Jeżeli nie został sklasyfikowany to prezentowany jest jako niebieskie kółko.
Funkcja realizowana przez zespół sieci
Wyniki klasyfikacji na zbiorze uczącym
Wyniki wlasyfikacji na zbiorze testowym
Wnioski końcowe
Wyniki klasyfikacji w największym stopniu zależą od wag połączeń z jakimi z zostanie zainicjowana sieć neuronowa. Na proces uczenia sieci neuronowych wpływa również wiele innych czynników, które należy brać pod uwagę. Mimo iż opracowywany tu problem nie był skomplikowany, to wykorzystanie sieci neuronowych może być skuteczne dopiero po dokładnym jego przeanalizowaniu i świadomej konfiguracji wielu jej elementów.
Wysiłek włożony w konstruowanie odpowiedniej sieci owocuje lepszym algorytmem klasyfikacji, który opiera się na modelowaniu źródła danych, a nie na zapamiętywaniu zbioru uczącego.
Dla klasyfikatora zbudowanego z pojedynczej sieci:
Można stwierdzić że użyta struktóra sieci neuronowych jest optymalna. Algorytm uczenia przynosi pożądane rezultaty i uczy sieć do zadanego poziomu błędu. Sprawność jest zadowalająca: zależnie od początkowych wartości wag od 95% do 99%.
Za dowód poprawności działania sieci można przyjąć prawie tak samo wysoką sprawność dla danych testowych co danych uczących. Funkcja realizowana przez sieć jest poprawna w subiektywnej ocenie autora.
Na podstawie pomiarów wnioskuję, że jeden klasyfikator ma lepszą sprawność niż K klasyfikatorów, co jednak może być wynikiem zamałej ilości testów. Teoretycznie większą zdolność adaptacyjną powinien mieć klasyfikator złożony z K sieci neuronowych.
Dla 3 klasyfikatorów
Układ 3 niezależnych sieci realizujących funkcję klasyfikatora także osiąga wysoką sprawność, jednak widać, że realizowana przezeń funkcja nie jest tak dokładnie dopasowana jak w pierwszym przypadku. Mimo to, dla wszystkich testów osiągał on sprawność powyżej 85%, przeważnie więcej niż 90%.
Obydwa klasyfikatory wyraźnie mają problemy z klasyfikacją w podobnych miejscach, chociaż układ K klasyfikatorów popełnia tam więcej błędów. Taki wynik jest zastanawiający i może wskazywać na zbyt małą liczbę pomiarów.
Źródła
S. Osowski - Sieci neuronowe
H. Demuth, M. Beale - Neural Network Toolbox. User's guide
S. Jankowski - Materiały pomocnicze do wykładu z SNN
http://www.kik.pcz.czest.pl/nn/
http://panda.bg.univ.gda.pl/~prezes/sn/sn.htm
Inne źródła
+
+
+
+
y
+
+
+
x