Upload
hoangcong
View
223
Download
0
Embed Size (px)
Citation preview
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
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.
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,:), '+')
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.
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
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.
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.
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;
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.
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.
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.
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.
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
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
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
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.
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"
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%.
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).
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
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
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.
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
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
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.
Pracownia specjalistyczna z przedmiotu: Podstawy Sztucznej Inteligencji (WM, Inżynieria Biomedyczna)
26
Ćwiczenie 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
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.