instrukcja do ćwiczenia nr 3

28
Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki Pracownia specjalistyczna z przedmiotu: Podstawy Sztucznej Inteligencji Wydział Mechaniczny kierunek Inżynieria Biomedyczna studia stacjonarne II stopnia, semestr I Opracował dr hab. inż. Mirosław Świercz, prof. nzw. PB Białystok, kwiecień 2016 r. ĆWICZENIE 3 ZASTOSOWANIE NEURONOWYCH SIECI WSPÓŁZAWODNICZĄCYCH I SAMOORGANIZUJĄCYCH SIĘ W PROBLEMACH KLASYFIKACJI DANYCH I ROZPOZNAWANIA WZORCÓW

Transcript of instrukcja do ćwiczenia nr 3

Page 1: instrukcja do ćwiczenia nr 3

Politechnika Białostocka

Wydział Elektryczny

Katedra Automatyki i Elektroniki

Pracownia specjalistyczna z przedmiotu:

Podstawy Sztucznej Inteligencji

Wydział Mechaniczny

kierunek Inżynieria Biomedyczna

studia stacjonarne II stopnia, semestr I

Opracował

dr hab. inż. Mirosław Świercz, prof. nzw. PB

Białystok, kwiecień 2016 r.

ĆWICZENIE 3

ZASTOSOWANIE NEURONOWYCH

SIECI WSPÓŁZAWODNICZĄCYCH

I SAMOORGANIZUJĄCYCH SIĘ

W PROBLEMACH KLASYFIKACJI DANYCH

I ROZPOZNAWANIA WZORCÓW

Page 2: instrukcja do ćwiczenia nr 3

Pracownia specjalistyczna z przedmiotu: Podstawy Sztucznej Inteligencji (WM, Inżynieria Biomedyczna)

2

Ćwiczenie 3

1. CEL ĆWICZENIA

Celem ćwiczenia jest nabycie umiejętności zastosowania sieci neuronowych działających na

zasadzie współzawodnictwa: sieci typu LVQ (ang. Learning Vector Quantization) oraz

samoorganizujących się map cech (sieci Kohonena) w zadaniach klasyfikacji danych

w wielowymiarowych przestrzeniach cech.

Realizacja niniejszego ćwiczenia polega na samodzielnym rozwiązaniu trzech zadań.

W pierwszym zadaniu studenci zapoznają się z działaniem sieci LVQ, wykorzystując w tym

celu sztucznie generowany zbiór danych należących do kilku klas. Drugie zadanie polega na

skonstruowaniu sieci LVQ do rozwiązania znanego problemu testowego – klasyfikacji

gatunków irysów na podstawie zbioru cech liści i kwiatów tych roślin. W trzecim zadaniu

studenci badają właściwości samoorganizujących się map (ang. Self-Organizing Maps, SOM)

w problemie klasyfikacji rzeczywistych danych wielowymiarowych zebranych u chorych na

nowotwór piersi.

Do rozwiązania zadań wykorzystuje się środowisko Matlab/Simulink w wersji 8.6.0

(R2015b), dostępne w laboratoriach Katedry Automatyki i Elektroniki, wraz z zainstalowaną

w tym pakiecie biblioteką narzędziową Neural Network Toolbox (wersja 8.4).

W eksperymentach symulacyjnych wykorzystuje się dane generowane przez studentów oraz

zbiory danych pochodzących z repozytorium University of California, Irvine, Machine

Learning Repository (http://archive.ics.uci.edu/ml/).

2. KLASYFIKACJA DANYCH ZA POMOCĄ SIECI LVQ

W zadaniu konstruuje się sieć neuronową typu LVQ, złożoną z dwóch warstw:

wejściowej warstwy neuronów współzawodniczących oraz warstwy wyjściowej

zawierającej neurony o liniowej funkcji aktywacji, sumujące wielościany Voronoi,

uzyskane w wyniku działania neuronów warstwy współzawodniczącej. Zadaniem sieci

LVQ jest klasyfikacja punktów na płaszczyźnie, leżących w skupiskach o różnym

rozproszeniu (wewnątrz kwadratu o zadanym środku i ramieniu – połowie długości

boku). Dane – współrzędne punktów należących do każdego ze skupisk (klastrów) są

generowane przez studentów.

W omówionym poniżej przykładzie konstruuje się sieć neuronową typu LVQ, która

klasyfikuje punkty, należące do czterech klas (skupisk punktów na płaszczyźnie). Dla

celów dydaktycznych, skupiska punktów wygenerowane w poniższym przykładzie mają

niewielki rozrzut, toteż poszczególne klasy są separowalne. W ćwiczeniach

symulacyjnych, wykonywanych samodzielnie przez studentów, punkty powinny leżeć

w częściowo pokrywających się obszarach, co umożliwia obserwację zmian jakości

klasyfikacji przy różnych architekturach sieci LVQ.

Page 3: instrukcja do ćwiczenia nr 3

Pracownia specjalistyczna z przedmiotu: Podstawy Sztucznej Inteligencji (WM, Inżynieria Biomedyczna)

3

Ćwiczenie 3

2.1. PRZYKŁADOWE ROZWIĄZANIE ZADANIA KLASYFIKACJI ZBIORU PUNKTÓW

ZA POMOCĄ SIECI UCZĄCEJ SIĘ KWANTYZACJI WEKTOROWEJ (LVQ)

Załóżmy, że klasyfikowane punkty na płaszczyźnie XY leżą wewnątrz kwadratu A:

A = {(x, y): x [-2.5; 2.5], y [-2.5; 2.5]}. Pierwszym krokiem jest wygenerowanie

czterech zbiorów punktów, z których każdy liczy 50 elementów. Każdy z czterech

zbiorów punktów zawiera się wewnątrz klastra, określonego przez swój środek i ramię

(wartość połowy długości boku kwadratu). Współrzędne środków klastrów są

zdefiniowane przez dwuelementowe wektory ‘c1’, ‘c2’, ‘c3’ i ‘c4’ (patrz ramka

poniżej). Ramię klastra jest wspólne dla wszystkich zbiorów – jego wartość określa

zmienna ‘ramie_cl’.

Do generacji punktów została użyta funkcja ‘nngenc’ (nieopisana w aktualnej wersji

pakietu MATLAB), która tworzy skupiska o zadanej wariancji (rozproszeniu), położone

w granicach określonych przez użytkownika, złożone z zadanej liczby wektorów.

Wywołanie funkcji: V = NNGENC(X, C, N, D)

WEJŚCIE:

X - macierz o wymiarach Rx2, gdzie R jest liczbą współrzędnych generowanych

wektorów; każdy wiersz pierwszej kolumny zawiera minimalną wartość

odpowiedniej współrzędnej obszaru, w którym mieszczą się generowane

wektory; każdy wiersz drugiej kolumny – maksymalną wartość odpowiedniej

współrzędnej centrum skupiska

C - liczba skupisk

N - liczba punktów (wektorów) w każdym skupisku

D - odchylenie standardowe wygenerowanych punktów wokół centrum skupiska

(argument opcjonalny, wartość domyślna d = 1.0)

WYJŚCIE:

V - macierz zawierająca CxN R-elementowych wektorów, położonych w C

skupiskach, zawartych w obszarze określonym przez współrzędne macierzy

X; każde skupisko zawiera N punktów, rozmieszczonych losowo wokół

centrum, z odchyleniem standardowym D

Przykładowe użycie:

Instrukcje poniżej generują osiem skupisk punktów na płaszczyźnie (liczba

współrzędnych generowanych wektorów wynosi dwa). Każde skupisko zawiera po

sześć punktów, rozmieszczonych wokół centrum skupiska z odchyleniem

standardowym równym 0.5. Centra skupisk są położone wewnątrz prostokąta,

którego współrzędna x [-10, 10], zaś współrzędna y [-5, 5].

X = [-10 10; -5 5];

V = nngenc(X, 8, 6, 0.5);

plot(V(1,:), V(2,:), '+')

Page 4: instrukcja do ćwiczenia nr 3

Pracownia specjalistyczna z przedmiotu: Podstawy Sztucznej Inteligencji (WM, Inżynieria Biomedyczna)

4

Ćwiczenie 3

Zmienne ‘pkt_kl1’, ‘pkt_kl2’, ‘pkt_kl3’, ‘pkt_kl4’ oznaczają macierze o wymiarach

2x50, zawierające współrzędne punktów należących do poszczególnych klas. Dla

wartości rozproszenia ‘var_cl’ = 0.1 punkty są położone blisko centrów skupisk i nie

wchodzą w obszary zajęte przez inne skupiska.

close all rng(1234567890); c1 = [-0.5; 2.0]; c2 = [-0.9; -2.4]; c3 = [1.2; -1.7]; c4 = [2; 1.5]; ramie_cl = 0.75; var_cl = 0.1; pkt_kl1 = nngenc([c1-ramie_cl, c1+ramie_cl], 1, 50, var_cl); pkt_kl2 = nngenc([c2-ramie_cl, c2+ramie_cl], 1, 50, var_cl); pkt_kl3 = nngenc([c3-ramie_cl, c3+ramie_cl], 1, 50, var_cl); pkt_kl4 = nngenc([c4-ramie_cl, c4+ramie_cl], 1, 50, var_cl); figure(); xlabel('x'), ylabel('y'); title('Skupiska klasyfikowanych punktow'); hold on plot(pkt_kl1(1,:), pkt_kl1(2,:), 'r*'); plot(pkt_kl2(1,:), pkt_kl2(2,:), 'gp'); plot(pkt_kl3(1,:), pkt_kl3(2,:), 'b>'); plot(pkt_kl4(1,:), pkt_kl4(2,:), 'md'); axis([-2.5, 2.5, -2.5, 2.5]); legend({'Klasa I', 'Klasa II', 'Klasa III', 'Klasa IV'});

% Zamknięcie okien z wykresami % Ustawienie generatora liczb losowych, % zapewniające powtarzalność wygenerowanych % liczb przy każdym uruchomieniu pliku; % % Generowanie współrzędnych 200 punktów % na płaszczyźnie. % Punkty tworzą cztery skupiska (klastry) o zadanych % centrach i szerokościach (ramionach kwadratu). % % Zakres zmienności współrzędnych punktów: % -2.5 <= x <= 2.5; % -2.5 <= y <= 2.5; % % Określenie położenia centrów klastrów oraz ich % rozpiętości (szerokości) 'ramie_cl ' i rozproszenia % ‘var_cl’ % % % % % Generowanie po 50 punktów w każdym klastrze – % punkty będą użyte do treningu sieci LVQ % % % % Rysowanie skupisk punktów na płaszczyźnie

Położenie punktów należących do poszczególnych klas przedstawia rysunek poniżej

(punkty należące do klasy IV są częściowo przysłonięte przez obszar legendy). Można

jednak stwierdzić, że skupiska (klasy) punktów zajmują niepokrywające się obszary,

które można łatwo odseparować liniowymi granicami decyzyjnymi.

Page 5: instrukcja do ćwiczenia nr 3

Pracownia specjalistyczna z przedmiotu: Podstawy Sztucznej Inteligencji (WM, Inżynieria Biomedyczna)

5

Ćwiczenie 3

Kolejnym krokiem jest przygotowanie danych treningowych, które posłużą do

uczenia sieci typu LVQ. Dane wejściowe sieci, tj. współrzędne 200 punktów na

płaszczyźnie (przedstawionych na powyższym rysunku) zawiera macierz ‘P_tr’

o wymiarach 2x200 – każda kolumna tej macierzy zawiera współrzędne x i y jednego

punktu. Wektor wierszowy ‘T_tr’ zawiera indeksy (numery) klas, do których należą

kolejne punkty.

Sekwencja kolejnych instrukcji służy do utworzenia i treningu sieci LVQ uczącej

się klasyfikacji punktów. Ze względu na nieskomplikowany charakter problemu –

punkty są położone w separowalnych obszarach, liczba neuronów współzawodniczących

‘l_comp_neur’ może być najmniejsza z możliwych, tj. równa liczbie klas, do których

należą dane uczące. W przypadkach bardziej złożonych, gdy granic pomiędzy klasami

nie da się zamodelować za pomocą odcinków (półprostych), liczba neuronów warstwy

współzawodniczącej powinna być równa wielokrotności liczby klas. Przed

rozpoczęciem treningu można również ustalić maksymalną liczbę epok treningowych

(nadając inną niż domyślna wartość zmiennej ‘siec_LVQ.trainParam.epochs’) lub inne

kryterium zatrzymania procesu uczenia – wartość błędu średniokwadratowego

‘siec_LVQ.trainParam.goal’ równą np. 1.0e-4 (10-4

).

Trening sieci LVQ realizuje procedura ‘train’, której parametrami wejściowymi są

następujące zmienne:

• struktura ‘siec_LVQ’, zawierająca początkowe lub domyślne parametry sieci LVQ,

które będą modyfikowane w procesie treningu ;

• macierz ‘P_tr’ zawierająca dane (wektory) wejść sieci;

• macierz pożądanych wyjść sieci – funkcja wymaga, aby numery klas zostały

zapisane w kodzie 1-z-N, tzn. aby macierz pożądanych wyjść miała liczbę wierszy

Page 6: instrukcja do ćwiczenia nr 3

Pracownia specjalistyczna z przedmiotu: Podstawy Sztucznej Inteligencji (WM, Inżynieria Biomedyczna)

6

Ćwiczenie 3

równą liczbie klas, a każda kolumna tej macierzy zawierała dokładnie jedną jedynkę

w odpowiednim wierszu, transformacji wierszowego wektora ‘T_tr’ do takiej

postaci dokonuje funkcja ‘ind2vec’.

Po przeprowadzeniu treningu można obliczyć wartości wyjść sieci LVQ oraz

wyznaczyć procentowy błąd klasyfikacji i macierz omyłek (patrz: końcowa sekwencja

instrukcji w ramce poniżej).

P_tr = [pkt_kl1, pkt_kl2, pkt_kl3, pkt_kl4]; T_tr = [ones(1,50), 2*ones(1,50), 3*ones(1,50), 4*ones(1,50)]; l_comp_neur = 4; siec_LVQ = lvqnet(l_comp_neur); siec_LVQ.trainParam.epochs = 50; siec_LVQ = train(siec_LVQ, P_tr, ind2vec(T_tr)); wyj_sieci = siec_LVQ(P_tr); nr_klasy_wyj_sieci = vec2ind(wyj_sieci); disp([' Liczba blednych klasyfikacji = ', ... num2str(sum((T_tr-nr_klasy_wyj_sieci).^2))]); figure(); plotconfusion(ind2vec(T_tr), wyj_sieci); title('Macierz omylek'); xlabel('Klasa pozadana'); ylabel('Wyjscie sieci - nr klasy'); blad_proc = 100 * perform(siec_LVQ, T_tr, nr_klasy_wyj_sieci); disp([' Procentowy blad klasyfikacji = ', ... num2str(blad_proc), '%']);

% Dane treningowe: wektory wejściowe i pożądane % wartości wyjść sieci LVQ % % % Liczba neuronów współzawodniczących % - powinna być wielokrotnością liczby klas! % Utworzenie sieci LVQ o nazwie ‘siec_LVQ’ % Ograniczenie liczby epok treningu % Przeprowadzenie treningu sieci % % Obliczenie wyjść sieci (w postaci macierzy) % - każda kolumna zawiera jedną jedynkę % w wierszu odpowiadającym indeksowi klasy % Zamiana na wektor wierszowy - elementy % wektora to numery klasy elementu % % % % Macierz omyłek dla zbioru treningowego % % % % Procentowy błąd klasyfikacji

W celu zilustrowania sposobu podziału dwuwymiarowej przestrzeni na obszary

przypisane poszczególnym klasom, można wygenerować zbiór punktów testowych

położonych w węzłach stosunkowo „gęstej” siatki. Sekwencja początkowych instrukcji

w ramce poniżej generuje taką siatkę, której węzły są oddalone od siebie o 0,01

„w poziomie” i „w pionie”. Macierze ‘X’ i ‘Y’ zawierające współrzędne węzłów siatki

należy przekształcić za pomocą funkcji ‘reshape’ w macierz ‘P_tst’ o dwóch wierszach,

zgodną z formatem wektorów wejściowych sieci LVQ.

Wyznaczone wartości wyjść sieci LVQ dla macierzy wejściowej ‘P_tst’ znajdują się

w wektorze wierszowym ‘y_siec’, którego elementami są numery klas (od 1 do 4)

punktów o współrzędnych z macierzy ‘P_tst’. Można więc przedstawić wyznaczone

przez sieć LVQ granice między klasami w rzucie poziomicowym (za pomocą funkcji

‘contour’). Na tym tle można pokazać położenie punktów treningowych, co może dać

wskazówki na temat ew. przyczyn błędnej klasyfikacji, ułatwić zaproponowanie

modyfikacji architektury sieci LVQ, itp.

Page 7: instrukcja do ćwiczenia nr 3

Pracownia specjalistyczna z przedmiotu: Podstawy Sztucznej Inteligencji (WM, Inżynieria Biomedyczna)

7

Ćwiczenie 3

x = -2.5:.01:2.5; y = x; [X, Y] = meshgrid(x, y); [m, n] = size(X); P_tst = [reshape(X, 1, m*n); reshape(Y, 1, m*n)]; y_siec = vec2ind(sim(siec_LVQ, P_tst)); figure(); xlabel('x'), ylabel('y'); title('Granice podzialu klas utworzone przez siec LVQ'); hold on contour(X, Y, reshape(y_siec, m, n)); plot(pkt_kl1(1,:), pkt_kl1(2,:), 'r*'); plot(pkt_kl2(1,:), pkt_kl2(2,:), 'gp'); plot(pkt_kl3(1,:), pkt_kl3(2,:), 'b>'); plot(pkt_kl4(1,:), pkt_kl4(2,:), 'md');

% Wyznaczanie i rysowanie granic podziału % przestrzeni na klasy (wielokąty Voronoi) % % Generowanie węzłów siatki i ich klasyfikacja % za pomocą wytrenowanej sieci LVQ % % % % % % Rysowanie granic wielokątów na wykresie % poziomicowym % % % Rysowanie położenia klasyfikowanych punktów

W analizowanym przykładzie „łatwego” położenia danych treningowych uzyskano

idealną jakość klasyfikacji, o czym świadczy macierz omyłek oraz zawarte w niej

procentowe wartości błędów klasyfikacji. Również uzyskany w wyniku treningu sieci

LVQ podział przestrzeni danych na obszary przypisane poszczególnym klasom

(pokazany na kolejnym rysunku) potwierdza odpowiedni wybór architektury sieci – sieć

LVQ o liczbie neuronów współzawodniczących równej liczbie klas wyznaczyła granice

decyzyjne w sposób adekwatny do położenia punktów treningowych. Separowalne

liniowo skupiska punktów zostały bezbłędnie sklasyfikowane przez wytrenowaną sieć

typu LVQ.

Page 8: instrukcja do ćwiczenia nr 3

Pracownia specjalistyczna z przedmiotu: Podstawy Sztucznej Inteligencji (WM, Inżynieria Biomedyczna)

8

Ćwiczenie 3

2.2. ZADANIE NR 1 (DO REALIZACJI NA ZAJĘCIACH)

Za pomocą sieci uczącej się kwantyzacji wektorowej (LVQ) dokonać klasyfikacji zbioru

punktów rozmieszczonych nierównomiernie w zbiorze A na płaszczyźnie XY: A = {(x, y):

x [-2.5; 2.5], y [-2.5; 2.5]}. W tym celu należy:

a) Wygenerować zbiór danych treningowych, złożony ze 160-240 punktów, podzielonych

na cztery klasy. Punkty należące do każdej z nich mają być położone w skupiskach

(„klastrach”) wewnątrz zbioru A. Do generacji punktów każdej z klas należy użyć

funkcji ‘nngenc’. Funkcję tę należy wywołać czterokrotnie (jak w omawianym wyżej

przykładzie), podając za każdym razem w parametrach wywołania inne granice

skupiska oraz liczbę „klastrów” równą 1. Założyć, że punkty powinny leżeć wokół

centrów skupisk z odchyleniem standardowym równym 0.15 (‘var_cl = 0.15;’).

b) Utworzyć sieć LVQ oraz zrealizować jej trening; liczba neuronów sieci powinna być

równa liczbie skupisk. Do tworzenia sieci i jej treningu należy wykorzystać

odpowiednio funkcje ‘lvqnet’ i ‘train’.

c) Wyznaczyć i narysować na płaszczyźnie (razem ze zbiorem klasyfikowanych punktów)

granice obszarów oddziaływania każdego z neuronów sieci LVQ. W tym celu należy

wygenerować punkty siatki, gęsto pokrywającej zbiór A (funkcja ‘meshgrid’),

wyznaczyć dla każdego z tych punktów numer aktywnego neuronu (za pomocą funkcji

‘sim’ lub bezpośredniej instrukcji ‘y_siec = siec_LVQ(P_tst);’ wywoływanych po

wytrenowaniu sieci LVQ) oraz połączyć punkty zaliczone przez sieć do tej samej klasy

(funkcja ‘contour’). Sformułować wnioski na temat jakości procesu klasyfikacji danych

przez sieć neuronową typu LVQ;

Page 9: instrukcja do ćwiczenia nr 3

Pracownia specjalistyczna z przedmiotu: Podstawy Sztucznej Inteligencji (WM, Inżynieria Biomedyczna)

9

Ćwiczenie 3

d) Punkty a), b) i c) powtórzyć dla dwóch wartości wariancji klastrów ‘var_cl’, większych

od 0,15 (zaleca się jednak, aby wartość wariancji nie przekraczała 0,75). Przy

zwiększaniu wartości wariancji akceptowalną jakość klasyfikacji można zapewnić

zwiększając liczbę neuronów w warstwie współzawodniczącej. Sformułować wnioski

na temat jakości procesu klasyfikacji danych w zależności od rozkładu punktów

treningowych i architektury sieci LVQ;

3. KLASYFIKACJA WIELOWYMIAROWYCH DANYCH ZA POMOCĄ SIECI

NEURONOWYCH WSPÓŁZAWODNICZĄCYCH I JEDNOKIERUNKOWYCH

W zadaniu konstruuje się sieć neuronową typu LVQ w celu klasyfikacji trzech

gatunków irysów (Setosa, Versicolour, Virginica) na podstawie czterech cech kwiatu –

długości i szerokości płatków (ang. petal length, petal width) oraz długości i szerokości

działek kielichów (ang. sepal length, sepal width). Dane, zawierające wartości liczbowe

150 osobników (po 50 każdego gatunku) pochodzą z ogólnodostępnego repozytorium

danych University of California, Irvine, Machine Learning Repository

(https://archive.ics.uci.edu/ml/datasets/Iris). Jakość klasyfikacji uzyskaną za pomocą

sieci LVQ należy porównać z uzyskiwaną za pomocą sieci jednokierunkowych typu

MLP (perceptronu wielowarstwowego) oraz sieci RBF (o radialnych funkcjach

bazowych), których konstrukcja jest również celem niniejszego zadania.

Dane do treningu i testowania sieci, zawarte w pliku ‘Irysy_dane.m’, mają postać

macierzy o nazwie ‘irysy_15’, którą ładuje się do przestrzeni roboczej wykonując w/w

m-plik. Macierz zawiera 150 wierszy, z których pierwsze 50 zawiera dane osobników

należących do gatunku Setosa, kolejne 50 – do gatunku Versicolour, zaś ostatnie 50

wierszy reprezentuje cechy osobników z gatunku Virginica. Pierwsze cztery kolumny

macierzy zawierają znormalizowane wartości w/w cech kwiatów irysów (do przedziału

[0, 1]). Trzy ostatnie kolumny macierzy reprezentują gatunek osobnika, przedstawiony

w kodzie 1-z-N (każdy wiersz zawiera tylko jedną jedynkę w tych kolumnach, położoną

stosownie do przynależności gatunkowej osobnika).

Obserwując rozkład danych w układzie współrzędnych utworzonym przez trzy

dowolne cechy kwiatu (wybrane z czterech cech reprezentujących osobnika) można

stwierdzić, że obszary, w których zawierają się dane różnych gatunków irysów nie są

separowalne. Zadaniem studentów jest ocena zdolności klasyfikacyjnych trzech typów

sieci neuronowych o różnych architekturach (przede wszystkim o różnej liczbie

neuronów w pierwszej warstwie przetwarzającej sieci każdego typu) w zadaniu

klasyfikacji rzeczywistych danych, których rozkład jest odzwierciedleniem zmienności

osobniczej populacji biologicznych.

Page 10: instrukcja do ćwiczenia nr 3

Pracownia specjalistyczna z przedmiotu: Podstawy Sztucznej Inteligencji (WM, Inżynieria Biomedyczna)

10

Ćwiczenie 3

3.1. PRZYKŁADOWE ROZWIĄZANIE ZADANIA KLASYFIKACJI GATUNKÓW IRYSÓW

ZA POMOCĄ SIECI TYPU LVQ I SIECI TYPU MLP

W poniższym przykładzie konstruuje się sieci neuronowe dwóch typów: LVQ i MLP,

które klasyfikują gatunki irysów na podstawie czterech cech kwiatów. Pierwszym

krokiem rozwiązywania zadania jest wczytanie danych poprzez wywołanie pliku

‘Irysy_dane.m’, który zawiera opisaną wyżej macierz wartości cech i kodów gatunków

o nazwie ‘irysy_15’.

Sekwencja trzech kolejnych instrukcji powoduje znalezienie indeksów wierszy

macierzy, odpowiadających odpowiednio osobnikom pierwszego gatunku (‘ind_gat1’),

gatunku drugiego (‘ind_gat2’) oraz trzeciego (‘ind_gat3’). Rozkład cech osobników

każdego z gatunków w trójwymiarowym układzie współrzędnych utworzonych przez

trzy pierwsze cechy, jest następnie prezentowany w oknie graficznym. Zaleca się

przedstawienie danych także w innych układach współrzędnych, utworzonych na

przykład przez cechy: {1, 2, 4}, {2, 3, 4}, itp. oraz analizę wzajemnych relacji

pomiędzy cechami różnych gatunków kwiatów.

close all Irysy_dane; ind_gat1 = find(irysy_15(:, 5) ==1); ind_gat2 = find(irysy_15(:, 6) ==1); ind_gat3 = find(irysy_15(:, 7) ==1); figure(); % title('Rozklad cech osobnikow'); plot3(irysy_15(ind_gat1,1), irysy_15(ind_gat1,2), irysy_15(ind_gat1, 3), 'bx') hold on; plot3(irysy_15(ind_gat2,1), irysy_15(ind_gat2,2), irysy_15(ind_gat2, 3), 'ro') plot3(irysy_15(ind_gat3,1), irysy_15(ind_gat3,2), irysy_15(ind_gat3, 3), 'kv') xlabel('Cecha 1'); ylabel('Cecha 1'); zlabel('Cecha 1');

% Zamknięcie okien z wykresami % Wczytanie pliku danych - zbioru cech 150 kwiatów, % reprezentujących trzy gatunki irysów % (po 50 osobników każdego gatunku) % Znalezienie indeksów wierszy, zawierających % osobniki każdego z trzech gatunków % Prezentacja wybranych cech każdego gatunku % na wykresie trójwymiarowym % Uwaga! % Do prezentacji wybrano cechy nr 1, 2 i 3. % Pożądane jest wykreślenie danych w innym % układzie współrzędnych (reprezentujących % inny podzbiór cech)

Rozkład wartości trzech pierwszych cech osobników przedstawia się jak na rysunku

poniżej. Można zaobserwować, że cechy osobników pierwszego gatunku zajmują

wyraźnie odseparowany obszar w trójwymiarowej przestrzeni, podczas gdy cechy

kwiatów należących do pozostałych dwóch gatunków zawierają się w częściowo

pokrywających się obszarach. Podobnie przedstawiają się rozkłady cech w innych

trójwymiarowych podzbiorach przestrzeni cech kwiatów, co studenci powinni zbadać

samodzielnie.

Page 11: instrukcja do ćwiczenia nr 3

Pracownia specjalistyczna z przedmiotu: Podstawy Sztucznej Inteligencji (WM, Inżynieria Biomedyczna)

11

Ćwiczenie 3

Kolejnym krokiem jest przygotowanie danych do treningu sieci neuronowej typu

LVQ o czterech wejściach – wejścia sieci odpowiadają cechom kwiatu irysa.

W instrukcjach poniżej założono, że pierwsze 35 osobników każdego gatunku zostanie

wykorzystanych do treningu sieci, zaś pozostałe 15 osobników do jej testowania

(podział zbioru danych w stosunku 65%-35% na dane treningowe i testowe). Tak więc

ze współrzędnych 105 osobników tworzy się macierz wejść treningowych ‘P_tr’, zaś ze

współrzędnych 45 osobników – macierz wejść testowych ‘P_tst’. Z indeksów gatunków

tych samych osobników tworzy się odpowiednio macierze wyjść: treningowych ‘T_tr’

i testowych ‘T_tst’. Należy zwrócić uwagę na fakt, że w/w macierze mają trzy wiersze,

które zawierają indeks gatunku w kodzie 1-z-N (w każdej kolumnie występuje dokładnie

jedna „jedynka”, w wierszu odpowiadającym numerowi gatunku kwiatu irysa).

P_tr = [irysy_15(ind_gat1(1:35),1:4); irysy_15(ind_gat2(1:35),1:4); irysy_15(ind_gat3(1:35),1:4)]'; T_tr = [irysy_15(ind_gat1(1:35),5:7); irysy_15(ind_gat2(1:35),5:7); irysy_15(ind_gat3(1:35),5:7)]'; P_tst = [irysy_15(ind_gat1(36:50),1:4); irysy_15(ind_gat2(36:50),1:4); irysy_15(ind_gat3(36:50),1:4)]'; T_tst = [irysy_15(ind_gat1(36:50),5:7); irysy_15(ind_gat2(36:50),5:7); irysy_15(ind_gat3(36:50),5:7)]';

% Podział zbioru danych na podzbiór % treningowy (po 35 osobników każdego gatunku) % i testowy (po 15 pozostałych osobników) % % Uwaga! T_tr i T_tst są macierzami o trzech % wierszach każda. Każda kolumna takiej macierzy % zawiera nr gatunku irysa w kodzie 1-z-N (jedynka % w wierszu odpowiadającym numerowi gatunku)

Sekwencja kolejnych instrukcji pozwala na utworzenie sieci neuronowej typu LVQ

o nazwie ‘siec_LVQ’, przeprowadzenie jej treningu oraz prezentację wyników

klasyfikacji w postaci liczbowej i graficznej. Szerszy opis znaczenie poszczególnych

instrukcji przedstawiono w poprzednim rozdziale niniejszej instrukcji. W przykładzie

przyjęto najprostszą strukturę sieci LVQ, zawierającą 3 neurony współzawodniczące.

Page 12: instrukcja do ćwiczenia nr 3

Pracownia specjalistyczna z przedmiotu: Podstawy Sztucznej Inteligencji (WM, Inżynieria Biomedyczna)

12

Ćwiczenie 3

l_comp_neur = 3; siec_LVQ = lvqnet(l_comp_neur); siec_LVQ.trainParam.epochs = 250; siec_LVQ = train(siec_LVQ, P_tr, T_tr); wyj_sieci = siec_LVQ(P_tr); T_ind = vec2ind(T_tr); y_ind = vec2ind(wyj_sieci); figure(); plot(1:105, T_ind, 'bo'); hold on; plot(1:105, y_ind, 'r+', 'linewidth', 2); title('Trening LVQ - pozadane i obliczone indeksy gatunkow') xlabel('Nr osobnika'); ylabel('Gatunek irysa') disp('===== Siec LVQ ====='); disp([' Trening - liczba blednych klasyfikacji = ', ... num2str(length(find(T_ind-y_ind)))]); figure(); plotconfusion(T_tr, wyj_sieci); title('Trening LVQ - macierz omylek'); xlabel('Klasa pozadana'); ylabel('Wyjscie sieci - nr klasy'); blad_proc = 100 * perform(siec_LVQ, T_ind, y_ind); disp([' Trening - procentowy blad klasyfikacji = ', ... num2str(blad_proc), '%']);

%%% Klasyfikacja za pomocą sieci LVQ %%% ================================ % Liczba neuronów współzawodniczących – powinna % być wielokrotnością liczby klas! % Utworzenie sieci LVQ % Ograniczenie liczby epok treningu % Przeprowadzenie treningu sieci LVQ % Obliczenie wyjść sieci (w postaci macierzy) – każda % kolumna zawiera jedną jedynkę w wierszu % odpowiadającym indeksowi klasy % Zamiana macierzy na wektory zawierające % indeksy klas % Wykreślanie wyników klasyfikacji % Macierz omyłek dla zbioru treningowego % Błąd klasyfikacji

Trening sieci, utworzonej za pomocą powyższych instrukcji, przyniósł 5 błędnych

klasyfikacji, co przekłada się na wartość procentowego błędu klasyfikacji równą 4,76%.

Rysunek zestawia pożądane i uzyskane indeksy gatunku poszczególnych kwiatów.

Page 13: instrukcja do ćwiczenia nr 3

Pracownia specjalistyczna z przedmiotu: Podstawy Sztucznej Inteligencji (WM, Inżynieria Biomedyczna)

13

Ćwiczenie 3

Analiza macierzy omyłek (rysunek poniżej) wskazuje, że pierwszy gatunek kwiatów

został sklasyfikowany bezbłędnie, zaś 2 osobniki należące do drugiego gatunku zostały

zaliczone przez sieć do gatunku trzeciego i na odwrót – 3 osobniki z trzeciego gatunku

zostały zaliczone do gatunku drugiego. Taki rezultat klasyfikacji wynika z zauważonej

wcześniej właściwości częściowego pokrywania się obszarów cech „przynależnych”

dwóm gatunkom i prostej architekturze sieci LVQ, zdolnej do generowania jedynie

liniowych granic podziałów międzyklasowych.

W kolejnej grupie instrukcji przeprowadza się klasyfikację na danych testowych.

wyj_tst_sieci = siec_LVQ(P_tst); T_tst_ind = vec2ind(T_tst); y_tst_ind = vec2ind(wyj_tst_sieci); figure(); plot(1:45, T_tst_ind, 'bo'); hold on; plot(1:45, y_tst_ind, 'r+', 'linewidth', 2); title('Siec LVQ - indeksy gatunkow dla zbioru testowego') xlabel('Nr osobnika'); ylabel('Gatunek irysa') legend({'Pozadane', 'Obliczone'}); disp(' '); disp([' Test LVQ - liczba blednych klasyfikacji = ', ... num2str(length(find(T_tst_ind-y_tst_ind)))]); figure(); plotconfusion(T_tr, wyj_sieci); title('Siec LVQ - macierz omylek (zbior testowy)'); xlabel('Klasa pozadana'); ylabel('Wyjscie sieci - nr klasy'); blad_proc = 100 * perform(siec_LVQ, T_tst_ind, y_tst_ind); disp([' Test LVQ - procentowy blad klasyfikacji = ', ... num2str(blad_proc), '%']);

% Obliczenie wyjść sieci (w postaci macierzy) % dla zbioru testowego % Zamiana macierzy na wektory zawierające % indeksy klas % Prezentacja wyników klasyfikacji zbioru testowego % Macierz omyłek dla zbioru testowego % Procentowy błąd klasyfikacji

Page 14: instrukcja do ćwiczenia nr 3

Pracownia specjalistyczna z przedmiotu: Podstawy Sztucznej Inteligencji (WM, Inżynieria Biomedyczna)

14

Ćwiczenie 3

Wyniki generowane przez sieć neuronową na zbiorze testowym są jakościowo

zbliżone – liczba błędnych klasyfikacji wynosi 3, co odpowiada procentowemu błędowi

klasyfikacji o wartości ok. 6,67%. Rzeczywiste i wyznaczone przez siec indeksy

gatunków oraz macierz omyłek przedstawiają rysunki poniżej. Podobnie jak dla zbioru

treningowego – błędne klasyfikacje dotyczą drugiego i trzeciego gatunku kwiatów.

Dla porównania – w kolejnym etapie rozwiązywania zadania zostanie zbadana

jakość klasyfikacji gatunków irysów za pomocą jednokierunkowej sieci neuronowej

typu MLP. W przykładzie poniżej została wykorzystana bardzo prosta sieć, złożona

jedynie z trzech neuronów o logistycznych funkcjach aktywacji (‘logsig’) w warstwie

Page 15: instrukcja do ćwiczenia nr 3

Pracownia specjalistyczna z przedmiotu: Podstawy Sztucznej Inteligencji (WM, Inżynieria Biomedyczna)

15

Ćwiczenie 3

wejściowej oraz pojedynczym neuronie o liniowej funkcji aktywacji (‘purelin’)

w warstwie wyjściowej sieci.

Takie podejście wymaga kodowania indeksów gatunków kwiatów w postaci

liczbowej, na przykład kolejnych liczb naturalnych: 1, 2 i 3. Problem klasyfikacji

zostaje więc sprowadzony do aproksymacji trójwartościowej funkcji schodkowej –

może być zatem rozwiązany za pomocą funkcji ‘fitnet’ (dopasowującej wartości wyjść

sieci do zadanych wartości funkcji aproksymowanej).

Kolejne instrukcje w ramce poniżej określają liczbę neuronów pierwszej warstwy

oraz algorytm treningu (w tym przypadku Levenberga-Marquardta, ‘trainlm’),

a następnie tworzą strukturę sieci o nazwie ‘siec_MLP’ i określają parametry treningu.

Należy zwrócić uwagę na to, że w celu porównania działania sieci MLP i LVQ należy

przeprowadzać trening i testować działanie oby typów sieci na tych samych zbiorach

danych. Dlatego też określając parametry treningu nie dzieli się danych używanych

uprzednio do uczenia sieci LVQ na podzbiory: treningowy, walidacyjny i testowy –

trening sieci MLP zostanie przeprowadzony na tym samym zbiorze treningowym, a test

sieci, już po zakończeniu uczenia, na tym samym, co poprzednio, zbiorze testowym.

Należy więc ustawić wartość zmiennej ‘siec_MLP.divideParam.trainRatio = 100/100;’ .

Dwie ostatnie instrukcje w ramce wywołują trening sieci MLP i obliczają wartości

wyjść wytrenowanej sieci dla danych uczących.

trainFcn = 'trainlm'; liczba_neur_ukrytych = 3; siec_MLP = fitnet(liczba_neur_ukrytych, trainFcn); siec_MLP.divideParam.trainRatio = 100/100; siec_MLP.divideParam.valRatio = 0/100; siec_MLP.divideParam.testRatio = 0/100; siec_MLP.performFcn = 'mse'; siec_MLP.trainParam.epochs = 250; siec_MLP.trainParam.goal = 1.0e-4; siec_MLP.layers{1}.transferFcn = 'logsig'; [siec_MLP, tr] = train(siec_MLP, P_tr, T_ind); y_siec_MLP = siec_MLP(P_tr);

%%% Klasyfikacja za pomocą sieci MLP %%% ================================ % % Dane wejściowe (do treningu i testowania) są takie % same, jak dla sieci LVQ % Dane wyjściowe (wartości pożądanych wyjść sieci) % będą wektorami o wartościach elementów % wskazujących numer gatunku irysa: {1, 2, 3}. % W ten sposób są skonstruowane wektory: % T_ind i T_tst_ind % Tworzenie i trening sieci MLP % Trening metodą Levenberga-Marquardta % Utworzenie struktury zawierającej opis % jednokierunkowej sieci neuronowej % Podział na podzbiory zapewnia zgodność % z treningiem sieci LVQ (dane testowe są % osobnym zbiorem) % Wskaźnik jakości dopasowania - błąd % średniokwadratowy (Mean Squared Error) % Liczba epok treningowych % Cel treningu - pożądany błąd średniokwadratowy % Logistyczne funkcje aktywacji neuronów % warstwie ukrytej % Trening sieci neuronowej!!!!!! % Obliczenie wyjść sieci

Page 16: instrukcja do ćwiczenia nr 3

Pracownia specjalistyczna z przedmiotu: Podstawy Sztucznej Inteligencji (WM, Inżynieria Biomedyczna)

16

Ćwiczenie 3

Sekwencja kolejnych instrukcji służy do prezentacji wyników – wartości wyjść

sieci MLP dla danych treningowych na tle wartości pożądanych (indeksów gatunków

kwiatów). Ze względu na ciągłość funkcji aktywacji wyjściowego neuronu sieci MLP,

obliczone wartości wyjść mogą być różne od zbioru wartości pożądanych {1, 2, 3}.

Dlatego też w kolejnych instrukcjach ustala się progi w celu przypisania wartościom ze

zbioru liczb rzeczywistych wartości ze zbioru liczb naturalnych {1, 2, 3}. W przykładzie

poniżej progi zostały ustawione w połowie odległości pomiędzy liczbami 1 i 2 oraz 2 i 3

(tzn. na wartościach 1,5 i 2,5). Kolejne instrukcje służą do wykreślania wartości wyjść –

pożądanych i zaokrąglonych oraz obliczania procentowego błędu klasyfikacji.

figure(); plot(1:105, T_ind, 'bo'); hold on; plot(1:105, y_siec_MLP, 'r+', 'linewidth', 2); title('Trening MLP - pozadane i obliczone indeksy gatunkow') xlabel('Nr osobnika'); ylabel('Gatunek irysa') plot(1:105, 1.5*ones(1,105), 'g--'); plot(1:105, 2.5*ones(1,105), 'c--'); y_siec_MLP_prog = min(3.0, max(1.0, y_siec_MLP)); ind_2 = find((y_siec_MLP_prog <= 2.5) & (y_siec_MLP_prog > 1.5)); y_siec_MLP_prog(ind_2) = 2; y_siec_MLP_prog(y_siec_MLP_prog > 2.0) = 3; y_siec_MLP_prog(y_siec_MLP_prog < 2.0) = 1; figure(); plot(1:105, T_ind, 'bo'); hold on; plot(1:105, y_siec_MLP_prog, 'r+', 'linewidth', 2); title('Trening MLP - indeksy gatunkow (liczby calkowite)') xlabel('Nr osobnika'); ylabel('Gatunek irysa') disp(' '); disp(' '); disp('===== Siec MLP ====='); disp([' Trening MLP - liczba blednych klasyfikacji = ', ... num2str(length(find(T_ind-y_siec_MLP_prog)))]); figure(); plotconfusion(T_tr, ind2vec(y_siec_MLP_prog)); title('Trening sieci MLP - macierz omylek'); xlabel('Klasa pozadana'); ylabel('Wyjscie sieci - nr klasy'); blad_proc = 100 * length(find(T_ind-y_siec_MLP_prog)) / 105; disp([' Trening MLP - procentowy blad klasyfikacji = ', num2str(blad_proc), '%']);

% Rysowanie wyjść przed i po operacji "progowania" % Przybliżanie liczb leżących wewnątrz progów % do najbliższych całkowitych % Gatunek 2 - osobniki, dla których wyjścia sieci % leżą pomiędzy progami % Gatunek 3 - osobniki, dla których wyjścia sieci % leżą powyżej górnego progu % Gatunek 1 - osobniki, dla których wyjścia % sieci leżą poniżej dolnego progu % Macierz omyłek dla zbioru treningowego

Wykresy wartości wyjść sieci, tj. indeksy klas danych (przed i po zaokrągleniu)

przedstawiają rysunki poniżej. W omawianym przykładzie uzyskano idealną jakość

klasyfikacji na zbiorze danych treningowych.

Page 17: instrukcja do ćwiczenia nr 3

Pracownia specjalistyczna z przedmiotu: Podstawy Sztucznej Inteligencji (WM, Inżynieria Biomedyczna)

17

Ćwiczenie 3

Jakość klasyfikacji irysów za pomocą sieci MLP sprawdza się następnie na zbiorze

danych testowych. Kolejne grupy instrukcji w ramce poniżej obliczają i prezentują

wyniki klasyfikacji dla zbioru danych testowych – przed i po zaokrągleniu do liczb

naturalnych. Prezentowana jest również macierz omyłek oraz obliczany procentowy

błąd klasyfikacji.

y_tst_siec_MLP = siec_MLP(P_tst); figure(); plot(1:45, T_tst_ind, 'bo'); hold on; plot(1:45, y_tst_siec_MLP, 'r+', 'linewidth', 2); title('Test MLP - pozadane i obliczone indeksy gatunkow')

% Testowanie sieci MLP % Obliczenie wyjść sieci % Rysowanie wyjść przed i po operacji "progowania"

Page 18: instrukcja do ćwiczenia nr 3

Pracownia specjalistyczna z przedmiotu: Podstawy Sztucznej Inteligencji (WM, Inżynieria Biomedyczna)

18

Ćwiczenie 3

xlabel('Nr osobnika'); ylabel('Gatunek irysa') plot(1:45, 1.5*ones(1,45), 'g--'); plot(1:45, 2.5*ones(1,45), 'c--'); y_tst_siec_MLP_prog = min(3.0, max(1.0, y_tst_siec_MLP)); ind_2 = find((y_tst_siec_MLP_prog <= 2.5) & (y_tst_siec_MLP_prog > 1.5)); y_tst_siec_MLP_prog(ind_2) = 2; y_tst_siec_MLP_prog(y_tst_siec_MLP_prog > 2.0) = 3; y_tst_siec_MLP_prog(y_tst_siec_MLP_prog < 2.0) = 1; figure(); plot(1:45, T_tst_ind, 'bo'); hold on; plot(1:45, y_tst_siec_MLP_prog, 'r+', 'linewidth', 2); title('Test MLP - indeksy gatunkow (liczby calkowite)') xlabel('Nr osobnika'); ylabel('Gatunek irysa') disp(' '); disp([' Test MLP - liczba blednych klasyfikacji = ', num2str(length(find(T_tst_ind- y_tst_siec_MLP_prog)))]); figure(); plotconfusion(T_tst, ind2vec(y_tst_siec_MLP_prog)); title('Test sieci MLP - macierz omylek'); xlabel('Klasa pozadana'); ylabel('Wyjscie sieci - nr klasy'); blad_proc = 100 * length(find(T_tst_ind-y_tst_siec_MLP_prog)) / 105; disp([' Test MLP - procentowy blad klasyfikacji = ', ... num2str(blad_proc), '%']);

% Przybliżanie liczb leżących wewnątrz progów % do najbliższych całkowitych % Gatunek 2 - osobniki, dla których wyjścia sieci % leżą pomiędzy progami % Gatunek 3 - osobniki, dla których wyjścia sieci % leżą powyżej górnego progu % Gatunek 1 - osobniki, dla których wyjścia sieci % sieci leżą poniżej dolnego progu % Macierz omyłek dla zbioru testowego

Uzyskane w ten sposób wykresy przedstawiają rysunki poniżej. Błąd klasyfikacji

dal danych testowych wynosi w tym przykładzie 3,81%.

Page 19: instrukcja do ćwiczenia nr 3

Pracownia specjalistyczna z przedmiotu: Podstawy Sztucznej Inteligencji (WM, Inżynieria Biomedyczna)

19

Ćwiczenie 3

3.2. ZADANIE NR 2 (DO REALIZACJI NA ZAJĘCIACH)

Dokonać klasyfikacji gatunków irysów na podstawie cech kwiatów - dane do klasyfikacji

są dostępne w postaci M-pliku o nazwie ‘Irysy_dane.m’, zamieszczonym na tej samej stronie

www, co niniejsza instrukcja. Opis cech danych został zamieszczony w poprzednim

podrozdziale.

Polecenia do wykonania:

a) Podzielić zbiór dostępnych danych w sposób na dwa podzbiory: danych treningowych

(70-80% liczby obiektów) i danych testowych (pozostała część zbioru danych).

Page 20: instrukcja do ćwiczenia nr 3

Pracownia specjalistyczna z przedmiotu: Podstawy Sztucznej Inteligencji (WM, Inżynieria Biomedyczna)

20

Ćwiczenie 3

Podziału należy dokonać w taki sposób, aby w zbiorze treningowym (i testowym)

znalazła się w przybliżeniu taka sama liczba obiektów należących do każdego gatunku

irysów.

b) Macierze zawierające wektory treningowe i testowe (wejścia sieci neuronowych)

powinny zawierać cztery wiersze, reprezentujące kolejne cechy (atrybuty) kwiatu.

Wyjścia klasyfikatorów – pożądany gatunek kwiatu irysa można zakodować na dwa

sposoby: za pomocą kolejnych liczb naturalnych (np. 1, 2, 3) lub przedstawić w kodzie

1-z-N (jak w macierzy zamieszczonej w pliku danych). W pierwszym przypadku

macierz wyjść sieci będzie wektorem wierszowym, a projektowana sieć powinna mieć

jedno wyjście. W drugim sposobie kodowania macierz pożądanych wyjść sieci będzie

zawierała trzy wiersze, każda kolumna tej macierzy będzie zawierać wektor kodujący

numer gatunku, np. dla gatunku Iris-Setosa będzie to wektor [1 0 0]T, dla gatunku Iris-

Versicolour wektora [0 1 0]T, a dla gatunku Iris-Virginica wektor kodowy [0 0 1]

T.

Sieci, które klasyfikują zakodowane w ten sposób dane, muszą mieć trzy wyjścia –

każde z nich reprezentuje jeden gatunek irysów.

c) Narysować rozkłady danych treningowych i testowych – w trójwymiarowych układach

współrzędnych oraz w rzutach na trzy płaszczyzny: 0xy, 0xz i 0yz.

d) Dokonać klasyfikacji zbioru danych za pomocą następujących typów sieci

neuronowych:

sieci jednokierunkowych typu MLP, złożonych z neuronów o sigmoidalnych funkcjach

aktywacji (typu ‘logsig’ lub ‘tansig’);

sieci o radialnych funkcjach bazowych (RBF),

sieci typu LVQ.

Przy konstrukcji sieci o wymienionych wyżej architekturach należy uwzględnić

spostrzeżenia i wnioski, wynikające z opisu przykładowego rozwiązania zadania klasyfikacji

(w przykładzie nie została omówiona klasyfikacja za pomocą sieci RBF). Porównać rezultaty

klasyfikacji gatunków irysów za pomocą różnych typów sieci neuronowych.

4. ROZPOZNAWANIE WZORCÓW - KLASYFIKACJA NOWOTWORÓW PIERSI

ZA POMOCĄ SIECI WSPÓŁZAWODNICZĄCYCH I SAMOORGANIZUJĄCYCH SIĘ

MAP CECH

W zadaniu konstruuje się sieci neuronowe w celu klasyfikacji dwóch rodzajów

nowotworu piersi – łagodnego i złośliwego. Wymiarowość przestrzeni danych

wejściowych jest większa niż w omawianych dotychczas przykładach – dane zawierają

dziewięć atrybutów o wartościach znormalizowanych do przedziału [0, 1]. Zbiór danych

zawiera 699 przypadków, w których stwierdzono dwa rodzaje nowotworu piersi: 458

przypadków nowotworu łagodnego (ang. benign) i 241 przypadków nowotworu

złośliwego (ang. malignant). Dane pochodzą z ogólnodostępnego repozytorium danych

Page 21: instrukcja do ćwiczenia nr 3

Pracownia specjalistyczna z przedmiotu: Podstawy Sztucznej Inteligencji (WM, Inżynieria Biomedyczna)

21

Ćwiczenie 3

School of Information and Computer Sciences, University of California, Irvine,

Machine Learning Repository (adres strony www:

https://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+(Original)).

Dane do treningu i testowania sieci, zawarte w pliku ‘rak_piersi_dane.m’, mają

postać macierzy o nazwie ‘rak_dane’, którą ładuje się do przestrzeni roboczej

wykonując w/w m-plik. Macierz zawiera 699 wierszy, z których 458 zawiera dane

przypadków nowotworu łagodnego, a 241 nowotworu złośliwego. Pierwsze dziewięć

kolumn macierzy zawierają znormalizowane następujących wartości atrybutów (cech)

uzyskanych w wyniku badań komórek nowotworowych:

Nr cechy Nazwa

1 Clump Thickness - grubość grupy (warstwy) komórek

2 Uniformity of Cell Size - jednorodność rozmiaru komórek

3 Uniformity of Cell Shape - jednorodność kształtu

4 Marginal Adhesion - przyleganie (zlepianie) komórek

5 Single Epithelial Cell Size - rozmiar pojedynczych komórek

nabłonkowych

6 Bare Nuclei - „obnażone” jądra komórkowe

7 Bland Chromatin - opisuje jednorodność „tekstury” jądra

8 Normal Nucleoli - poziom normalności jąderek wewnątrz jądra

komórki

9 Mitoses - mitozy (podziały jądra komórki)

Dwie ostatnie kolumny macierzy reprezentują rodzaj nowotworu, przedstawiony

w kodzie 1-z-N (każdy wiersz zawiera tylko jedną jedynkę w tych dwóch kolumnach,

położoną stosownie do rodzaju nowotworu w danym przypadku).

W zadaniu dokonuje się klasyfikacji nowotworów za pomocą sieci rozpoznającej

wzorce (‘patternet’) oraz tworzy dwuwymiarowe mapy cech (ang. Self-Organizing

Maps) pozwalające na ocenę właściwości zbioru danych.

Obserwując rozkład danych w układzie współrzędnych utworzonym przez trzy

dowolne cechy (wybrane z dziewięciu atrybutów reprezentujących dany przypadek)

można stwierdzić, że obszary, w których zawierają się dane obydwu rodzajów

nowotworu nie są separowalne. Zadaniem studentów jest ocena zdolnośc i

klasyfikacyjnych sieci neuronowych (przede wszystkim jako funkcji liczby neuronów

w pierwszej warstwie przetwarzającej sieci) w zadaniu klasyfikacji rzeczywistych

danych, których rozkład jest odzwierciedleniem zmienności osobniczej populacji

biologicznej.

4.1. PRZYKŁADOWE ROZWIĄZANIE ZADANIA KLASYFIKACJI RODZAJÓW NOWOTWORU

W poniższym przykładzie konstruuje się sieci neuronowe dwóch typów: sieci służące

rozpoznawaniu wzorców (‘patternnet’) oraz sieci SOM, które klasyfikują rodzaj

nowotworu piersi. Pierwszym krokiem rozwiązywania zadania jest wczytanie danych

Page 22: instrukcja do ćwiczenia nr 3

Pracownia specjalistyczna z przedmiotu: Podstawy Sztucznej Inteligencji (WM, Inżynieria Biomedyczna)

22

Ćwiczenie 3

poprzez wywołanie pliku ‘rak_piersi_dane.m’, który zawiera opisaną wyżej macierz

wartości cech i kodów rodzaju nowotworu o nazwie ‘rak_dane’.

Sekwencja dwóch kolejnych instrukcji powoduje znalezienie indeksów wierszy

macierzy, odpowiadających odpowiednio przypadkom nowotworu łagodnego

(‘ind_now_1’) oraz nowotworu złośliwego (‘ind_now_2’). Rozkłady cech osobników

reprezentujących obydwa rodzaje nowotworu w trójwymiarowych układach

współrzędnych utworzonych przez trzy kolejne cechy, są następnie prezentowane

w oknach graficznych. Zaleca się przedstawienie danych także w innych układach

współrzędnych, utworzonych przez inne „trójki” cech oraz analizę wzajemnych relacji

pomiędzy cechami różnych rodzajów nowotworu.

close all rak_piersi_dane; ind_now_1 = find(rak_dane(:, 10) == 1); ind_now_2 = find(rak_dane(:, 11) == 1); figure(); plot3(rak_dane(ind_now_1,1), rak_dane(ind_now_1,2), rak_dane(ind_now_1, 3), 'bx') hold on; plot3(rak_dane(ind_now_2,1), rak_dane(ind_now_2,2), rak_dane(ind_now_2, 3), 'ro') xlabel('Cecha 1'); ylabel('Cecha 2'); zlabel('Cecha 3'); title('Rozkład danych - cechy 1, 2, 3'); figure(); plot3(rak_dane(ind_now_1,4), rak_dane(ind_now_1,5), rak_dane(ind_now_1, 6), 'bx') hold on; plot3(rak_dane(ind_now_2,4), rak_dane(ind_now_2,5), rak_dane(ind_now_2, 6), 'ro') xlabel('Cecha 4'); ylabel('Cecha 5'); zlabel('Cecha 6'); title('Rozkład danych - cechy 4, 5, 6'); figure(); plot3(rak_dane(ind_now_1,7), rak_dane(ind_now_1,8), rak_dane(ind_now_1, 9), 'bx') hold on; plot3(rak_dane(ind_now_2,7), rak_dane(ind_now_2,8 ), rak_dane(ind_now_2, 9), 'ro') xlabel('Cecha 7'); ylabel('Cecha 8'); zlabel('Cecha 9'); title('Rozkład danych - cechy 7, 8, 9');

% Zamknięcie okien z wykresami % Wczytanie pliku danych - zbioru cech 699 % przypadków raka piersi % Znalezienie indeksów wierszy, % zawierających przypadki każdego z dwóch % rodzajów nowotworu % Prezentacja wybranych cech każdego przypadku % na wykresie trójwymiarowym % % Uwaga! % Do prezentacji wybrano układy trzech % atrybutów (inne w każdym z trzech okien). % Pożądane jest wykreślenie danych w innym % układzie współrzędnych (reprezentujących % inne podzbiór cech)

Rozkład wartości kolejnych „trójek” cech osobników przedstawiają się jak na

poniższych rysunkach. Można zaobserwować wyraźne nakładanie się obszarów,

zajmowanych przez cechy obydwu rodzajów nowotworu.

Page 23: instrukcja do ćwiczenia nr 3

Pracownia specjalistyczna z przedmiotu: Podstawy Sztucznej Inteligencji (WM, Inżynieria Biomedyczna)

23

Ćwiczenie 3

Kolejnym krokiem jest utworzenie struktury sieci rozpoznającej wzorce

(‘patternnet’), jej trening i ocena jakości klasyfikacji danych. W opisywanym

przykładzie przyjęto, że sieć będzie miała 10 neuronów w warstwie wejściowej.

Powyższe czynności realizują instrukcje przedstawione w ramce.

l_neur = 10; siec_patt = patternnet(l_neur); siec_patt = train(siec_patt, rak_dane(:,1:9)', rak_dane(:,10:11)'); view(siec_patt); y_patt = siec_patt(rak_dane(:,1:9)'); plotconfusion(rak_dane(:,10:11)', y_patt);

% Liczba neuronów ukrytych % Utworzenie sieci rozpoznającej wzorce % Trening sieci % Widok architektury sieci % Obliczenie wyjść i macierzy omyłek

Page 24: instrukcja do ćwiczenia nr 3

Pracownia specjalistyczna z przedmiotu: Podstawy Sztucznej Inteligencji (WM, Inżynieria Biomedyczna)

24

Ćwiczenie 3

Wytrenowana sieć daje dokładność klasyfikacji bliską 98%, przy czym większa

liczba przypadków nowotworu łagodnego jest przez sieć zaliczona do klasy nowotworu

złośliwego niż odwrotnie. Szczegółowych informacji może dostarczyć przedstawiona

poniżej macierz omyłek.

W kolejnym etapie zostaje utworzona samoorganizująca się mapa cech, która

posłuży do zobrazowania cech klasyfikowanych danych. W ramce poniżej definiuje się

następujące parametry sieci SOM i jej treningu:

liczbę neuronów liczoną wzdłuż jednego boku siatki prostokątnej lub heksagonalnej

(‘l_neur_som’) – topologię sieci tworzy l_neur_som x l_neur_som neuronów;

rodzaj topologii sieci – wartością domyślną tego parametru jest topologia heksagonalna

‘hextop’;

liczbę kroków treningowych ‘siec_SOM_train_steps’;

promień sąsiedztwa w strukturze topologicznej sieci ‘siec_SOM_prom_sasiedz’;

przyjętą miarę odległości danych od neuronów sieci – wartością domyślną tego

parametru jest miara euklidesowa ‘linkdist’;

liczbę epok treningowych ‘siec_SOM.trainParam.epochs’.

W kolejnych instrukcjach tworzy się strukturę sieci SOM (‘siec_SOM’) i przeprowadza

jej trening. Ostatnia sekwencja instrukcji pozwala na wizualizację struktury sieci, wag

połączeń w promieniu sąsiedztwa, wag związanych z poszczególnymi wejściami sieci oraz

sposobu grupowania danych wejściowych.

l_neur_som = 6; siec_SOM_topology = 'hextop'; siec_SOM_train_steps = 100; siec_SOM_prom_sasiedz = 3;

% Liczba neuronów - topologię sieci SOM tworzy % (l_neur_som x l_neur_som) neuronów, % rozmieszczonych na płaszczyźnie % Domyślna topologia sieci - należy również zbadać % zachowanie topologii prostokątnej, instrukcja: % siec_SOM_topology = 'gridtop'; % Wartość domyślna - należy ją zmieniać w kolejnych % eksperymentach % Wartość domyślna - należy ją zmieniać w kolejnych

Page 25: instrukcja do ćwiczenia nr 3

Pracownia specjalistyczna z przedmiotu: Podstawy Sztucznej Inteligencji (WM, Inżynieria Biomedyczna)

25

Ćwiczenie 3

siec_SOM_dist = 'linkdist'; siec_SOM = selforgmap([l_neur_som l_neur_som], siec_SOM_train_steps, siec_SOM_prom_sasiedz, siec_SOM_topology); siec_SOM.trainParam.epochs = 300; siec_SOM = train(siec_SOM, rak_dane(:,1:9)'); view(siec_SOM); y_SOM = siec_SOM(rak_dane(:,1:9)'); classes_SOM = vec2ind(y_SOM); figure, plotsomtop(siec_SOM) figure, plotsomnc(siec_SOM) figure, plotsomnd(siec_SOM) figure, plotsomplanes(siec_SOM) figure, plotsomhits(siec_SOM, rak_dane(:,1:9)')

% eksperymentach % Miara odległości (euklidesowa) - należy również % zbadać miarę typu Manchester, instrukcja: % siec_SOM_dist = 'mandist'; % Utworzenie struktury sieci SOM % Ustawienie parametrów treningu - liczby epok % Trening i wizualizacja sieci % Obliczenie wyjść sieci o kodów klas % Wizualizacja topologii sieci, wag połączeń % w promieniu sąsiedztwa, wag związanych % z poszczególnymi wejściami sieci oraz sposobu % grupowania danych wejściowych

Uzyskane w powyższy sposób informacje zostały przedstawione na kolejnych

rysunkach.

Page 26: instrukcja do ćwiczenia nr 3

Pracownia specjalistyczna z przedmiotu: Podstawy Sztucznej Inteligencji (WM, Inżynieria Biomedyczna)

26

Ćwiczenie 3

Page 27: instrukcja do ćwiczenia nr 3

Pracownia specjalistyczna z przedmiotu: Podstawy Sztucznej Inteligencji (WM, Inżynieria Biomedyczna)

27

Ćwiczenie 3

4.2. ZADANIE NR 3 (DO REALIZACJI NA ZAJĘCIACH)

Wzorując się na powyższym przykładzie, należy skonstruować sieci neuronowe

rozpoznające wzorce, które dokonują klasyfikacji nowotworów piersi. W eksperymentach

symulacyjnych należy:

a) Podzielić zbiór dostępnych danych na podzbiór testowy i treningowy (w przykładzie

przeprowadzano trening na całym dostępnym zbiorze danych) i zbadać właściwości

sieci w standardowy sposób, przyjęty w tego typu zadaniach;

b) Zbadać wpływ liczby neuronów pierwszej warstwy sieci na jakość klasyfikacji oraz na

rozkład poprawnie i błędnie sklasyfikowanych przypadków (wykorzystując do analizy

macierz omyłek);

c) Wykorzystać do treningu i testowania podzbiór cech (na przykład pięciu czy sześciu)

i ocenić wpływ redukcji wymiarowości przestrzeni cech wejściowych na jakość

klasyfikacji.

Skonstruować sieci SOM o różnej topologii i wypowiedzieć się na temat ich

zdolności odwzorowania właściwości klasyfikowanych danych.

5. ZAWARTOŚĆ SPRAWOZDANIA

Sprawozdanie powinno być przekazane prowadzącemu na zajęciach, następujących po

zajęciach, na których wykonuje się ćwiczenie. Sprawozdanie z ćwiczenia powinno zawierać:

Wyniki przeprowadzonych badań symulacyjnych w postaci tabelarycznej (np. wartości

średniokwadratowych błędów aproksymacji na zbiorze treningowym i testowym – przy

Page 28: instrukcja do ćwiczenia nr 3

Pracownia specjalistyczna z przedmiotu: Podstawy Sztucznej Inteligencji (WM, Inżynieria Biomedyczna)

28

Ćwiczenie 3

zmianach architektury sieci) i graficznej (rysunki i wykresy wykonane na podstawie

zrzutów ekranowych). Wszystkie rysunki, zamieszczane w sprawozdaniu, powinny mieć

podpisy. Osie wykresów należy opisać i zwymiarować w stosowanych jednostkach

fizycznych.

Komentarze i wnioski wynikające z przeprowadzonych obliczeń (te elementy

sprawozdania mają największy wpływ na uzyskaną ocenę). W szczególności, na

podstawie wyników eksperymentów należy przeanalizować wpływ zmienianych

parametrów (np. liczby neuronów, parametrów ich funkcji aktywacji, topologii sieci, itp.)

na jakość rozpoznawania i klasyfikacji wzorców, uzyskiwane podczas treningu oraz

testowania.