Projekt pn. „Wzmocnienie potencjału dydaktycznego UMK w Toruniu w dziedzinach matematyczno-przyrodniczych”
realizowany w ramach Poddziałania 4.1.1 Programu Operacyjnego Kapitał Ludzki
Wprowadzenie do Sieci Neuronowych — Laboratorium 10 — Testowanie jakości uczenia
Jarosław Piersa, Maja Czoków 2013-12-03
1 Przypomnienie
1.1 Średnia poprawna klasyfikacja
• Po nauczeniu sieci sprawdzamy ile z przykładów jest klasyfikowanych poprawnie,
• Obliczamy ilość wszystkich przykładów,
• Przypisujemy:
jakość uczenia := ilość przykładów sklasyfikowanych poprawnie ilość wszystkich przykładów
1.2 Walidacja prosta
Rysunek 1: Schemat prostej walidacji uczenia.
• Dane uczące są losowo dzielone na dwa rozłączne zbiory:
– próbkę uczącą U , – próbkę testową T ,
• Sieć jest uczona za pomocą próbki uczącej,
• Jakość sieci jest badana tylko za pomocą próbki testowej
jakość := ilość przykładów T sklasyfikowanych poprawnie ilość wszystkich przykładów w T
1.3 Walidacja krzyżowa
Ang. k-fold cross-validation
• Dane uczące są losowo dzielone na k rozłącznych zbiorów: T1, ..., Tk,
• Zbiory powinny być równoliczne (lub różnić się o maksymalnie 1 element, jeżeli nie da się podzielić dokładnie),
• Dla i = 1...k powtarzamy
– uczymy sieć na zbiorze uczącym T1∪ ...Ti−1∪ Ti+1∪ Tk,
– testujemy tak nauczoną sieć na danych Ti (na tych danych sieć nie była uczona), – zapamiętujemy rezultat jako ri
• Zależnie od ilości miejsca podajemy wszystkie rezultaty ri,
• lub przynajmniej ich średnią, medianę, minimum, maksimum i odchylenie standardowe,
Rysunek 2: Schemat k-krotnej walidacji krzyżowej.
2 Zadania
2.1 Zadanie 0 (na rozgrzewkę)
Narysuj scatter-plot poniższego zbioru przykładów uczących lub innego samodzielnie wygenerowanego zestawu danych m = 2 0 ;
ex = [ ( -3.0 - 0 . 6 2 * r a n d n( m ,1)) , ( -4 -0.7 *r a n d n( m ,1)) , - o n e s ( m , 1 ) ; ( + 4 . 0 - 0 . 8 6 * r a n d n( m ,1)) , ( + 3 . 0 + 0 . 1 0 *r a n d n( m ,1)) , - o n e s ( m , 1 ) ; ( -3.5 - 0.7 * r a n d n( m ,1)) , (+3 -1.122*r a n d n( m ,1)) , o n e s ( m , 1 ) ; ( + 3 . 3 + 0.5 * r a n d n( m ,1)) , ( -4.1 -0.94 *r a n d n( m ,1)) , o n e s ( m ,1) ];
pp = f i n d( ex (: ,3) >0);
h o l d off ;
p l o t ( ex ( pp ,1) , ex ( pp ,2) , ’ b + ’);
h o l d on ;
nn = f i n d( ex (: ,3) <0);
p l o t ( ex ( nn ,1) , ex ( nn ,2) , ’ ro ’ );
2.2 Zadanie 1
Naucz pojedynczy perceptron klasyfikacji danych z zadania 0. Wyświetl procent poprawnie klasyfikowanych danych.
Można to zrobić poprzez modyfikację funkcji plotResultsPerceptron() w skrypcie do zajęć.
m a x T = 1 0 0 0 0 ;
w = p o c k e t L e a r n i n g A l g o r i t h m ( ex , m a x T );
% j e z e l i nie ma pod r e k a s k r y p t u z u c z e n i e m to c h o c
% w = r a n d o m (3 , 1);
a n s w e r s = [];
for i = ( 1 :l e n g t h( ex ))
a n s w e r s ( i ) = p e r c ([ ex ( i ,1) , ex ( i ,2)] , w ) == ex ( i , 3 ) ; end
pos = f i n d( answers > 0 ) ; neg = f i n d( answers < = 0 ) ;
p r i n t f (’ pos = % d / % d \ n ’, l e n g t h( pos ) , l e n g t h( ex ));
p r i n t f (’ neg = % d / % d \ n ’, l e n g t h( neg ) , l e n g t h( ex ));
f i g u r e( 2 ) ; h o l d off ;
p l o t( ex ( pos ,1) , ex ( pos ,2) , ’ b + ’ );
h o l d on ;
p l o t( ex ( neg ,1) , ex ( neg ,2) , ’ ro ’ );
2.3 Zadanie 2
Powtórz punkt 1 dla skonstruowanej sieci wieżowej (z poprzednich zajęć).
n e t w o r k = b u i l d S p i r e N e t w o r k ( ex );
% j e z e l i nie ma a l g o r y t m u u c z a c e g o to np
# n e t w o r k = r a n d n(3 , 1 0 ) ; N = l e n g t h( ex (1 , : ) ) ;
a n s w e r s = z e r o s(1 , l e n g t h( ex ));
for i = ( 1 :l e n g t h( ex ))
a n s w e r s ( i ) = s p i r e N e t w o r k ( ex ( i ,1: N -1) , w ) == ex ( i , N );
end
% a n s w e r s ma w a r t o s c i 0 lub 1 a = f i n d( a n s w e r s == 0);
a n s w e r s ( a ) = -1;
% t e r a z : +1 lub -1
% ex (: , N ) tez ma w a r t o s c i +1 lub -1
t r u e p o s = f i n d( answers ’ + ex (: , N ) > 1 . 5 ) ; t r u e n e g = f i n d( answers ’ - ex (: , N ) > 1 . 5 ) ; f a l s e p o s = f i n d( answers ’ + ex (: , N ) < -1.5);
f a l s e n e g = f i n d( answers ’ - ex (: , N ) < -1.5);
p r i n t f (’ t r u e pos = % d / % d \ n ’, l e n g t h( t r u e p o s ) , l e n g t h( ex ));
p r i n t f (’ t r u e neg = % d / % d \ n ’, l e n g t h( t r u e n e g ) , l e n g t h( ex ));
p r i n t f (’ f a l s e pos = % d / % d \ n ’, l e n g t h( f a l s e p o s ) , l e n g t h( ex ));
p r i n t f (’ f a l s e neg = % d / % d \ n ’, l e n g t h( f a l s e n e g ) , l e n g t h( ex ));
f i g u r e(3) h o l d off ;
p l o t( ex ( truepos ,1) , ex ( truepos ,2) , ’ b + ’ );
h o l d on ;
p l o t( ex ( trueneg ,1) , ex ( trueneg ,2) , ’ bo ’ );
p l o t( ex ( f a l s e p o s ,1) , ex ( f a l s e p o s ,2) , ’ r + ’ );
p l o t( ex ( f a l s e n e g ,1) , ex ( f a l s e n e g ,2) , ’ ro ’ );
l e g e n d(’ t r u e pos ’, ’ t r u e neg ’, ’ f a l s e pos ’, ’ f a l s e neg ’);
2.4 Zadanie 3
Podziel zbiór treningowy na dwa rozłączne podzbiory:
• Uczące
• Testowy
Naucz siec na pierwszym zbiorze ale wyniki przetestuj na drugim. Wykonaj operację odwrotną tj naucz sieć na zbiorze 2-gim a przetestuj na pierwszym. Porównaj rezultaty
% T e s t / W s z y t k i e t h r e s = .5;
r = r a n d(1 , l e n g t h( ex ));
% d z i e l i m y E na T e s t i U c z a c e t r a i n i n g = f i n d( r > t h r e s );
t e s t = f i n d( r <= t h r e s );
t r a i n i n g = ex ( t r a i n i n g , :);
t e s t = ex ( test , :);
m a x T = 1 0 0 0 ;
% p a t r z : k i l k a z a j e c t e m u
n e t w o r k = b u i l d S p i r e N e t w o r k ( t r a i n i n g , m a x T );
% p a t r z : z a d a n i e 1 i 2
p l o t R e s u l t s N e t w o r k ( network , t e s t );
h o l d on ;
t1 = f i n d( t r a i n i n g (: ,3) >0);
t2 = f i n d( t r a i n i n g (: ,3) <0);
p l o t( t r a i n i n g ( t1 ,1) , t r a i n i n g ( t1 ,2) , " g * " ) ; p l o t( t r a i n i n g ( t2 ,1) , t r a i n i n g ( t2 ,2) , " gd ");
l e g e n d(’ t e s t t r u e pos ’, ’ t e s t t r u e neg ’, ’ t e s t f a l s e pos ’, ’ t e s t f a l s e neg ’,
’ t r a i n i n g pos ’, ’ t r a i n i n g neg ’);
c z y Z a p i s y w a c = 0;
if c z y Z a p i s y w a c
p r i n t ( " . / w a l i d a c j a . svg " , " - c o l o r ");
end;
2.5 Zadanie 4
Wykonaj zadanie 3, ale z podzialem nie na 2 (dwa) ale na 4 (cztery) (dla chetnych na dowolne k) zbiory. Za każdym razem wybieramy jeden ze zbiorów jako testowy, a wszystkie pozostale sumujemy tworząc uczący.
Otrzymasz k wynikow (z k procesow uczenia). Wyswietl wykres, średnia, medianę, wariancję, min i max uzyskanych wyników.
2.6 Zadanie 5
Wygeneruj własny zestaw uczący na R2. Wykonaj zadania 1–4 dla nowego zestawu. Porównaj wyniki.
-8 -6 -4 -2 0 2 4 6 8
-6 -4 -2 0 2 4 6
true pos true neg false pos false neg training pos training neg
Rysunek 3: Przykładowa ilustracja na R2.