Sei sulla pagina 1di 29

ANFIS (Adaptive Neuro-Fuzzy Inference System)

Adaptivni Neuro Fazi Sistem Zakljuivanja Vjebe


Verzija 2.0

Tatjana Konjic

Vjebe - ANFIS struktura u MATLAB-u Radi lakeg praenja vjebe podsjetimo se jo jednom strukture fuzzy sistema Sugeno tipa. Neka su data dva pravila fazi sistema Takagi-Sugeno tipa:
1 1 1. Ako (If) x je A1 i y je B1, onda je (Then) f 1 = p1 0 + p1 x + p2 y 2 2 2 2. Ako (If) x je A2 i y je B2, onda je (Then) f 2 = p0 + p1 x + p2 y

Neka su funkcije pripadnosti fazi skupova Ai, Bi, i=1,2, oznaene sa Ai i Bi, respektivno. Za predstavljanje pravila, izabran je proizvod za T-normu (logika I operacija). 1. Uzroni dio pravila mogue je predstaviti kao:
i =
Ai

(x ) B ( y ),
i

i = 1,2

2. Izlaz sistema, uzimajui u obzir posljedini dio pravila je:


f (x , y ) = 1 (x , y ) f 1 (x , y ) + 2 (x , y ) f 2 (x , y ) , 1 (x , y ) + 2 (x , y )

ili, izostavljajui argumente:


f = 1 f 1 + 2 f 2 . 1 + 2

Normirani stepen zadovoljenja nekog pravila i definisan je kao:


i = i . 1 + 2

Funkcija izlaza f moe se zapisati kao:


f = 1 f 1 + 2 f 2 .

Mehanizam zakljuivanja Takagi-Sugeno fazi modela prvog reda sa skupom od dva If-Then pravila, dva ulaza (x i y) i jednim izlaznom f, prikazan je na slici 1.

x A1 x A2

1
N

1f1
f

B1 y B2

2
x y

2f2

Slika 1 Sugeno fazi struktura sa dva pravila Osnovni dijagram toka odreivanja strukture ANFIS-a u Matlabu prikazan je na slici 2.

Inicijalizacija fazi sistema komande: genfis1 ili genfis2

Zadavanje parametara obuavanja Vani su: broj iteracija (epoha) tolerancija (greka)

Pokretanje procesa obuavanja komanda: anfis zaustaviti proces kada je postignuta zadata tolerancija

Potvrda modela na nezavisnim podacima komanda: evalfis

Slike 2. Formiranje ANFIS-a

Primjer 1. Razmotrimo podeavanje fuzzy sistema nelinearnoj funkciji y u oblasti definisanosti [-1,1]. Nelinearna funkcija predstvlja sumu tri sinusne funkcije:
y = 0.8 sin( x ) + 0.4 sin(3x ) + 0.2 sin(5x ) .

Rjeenje Problem se rjeava koritenjem Fuzzy Logic Toolbox-a u MATLAB-u. Kako podaci nisu obezbjeeni, potrebno je prvo generisati ulazno-izlazni skup podataka. U tu svrhu koristi se m-file (sinF.m), koji je: % Broj ulaznih taaka je numPts = 51, a ulazni skup podataka je x numPts=51; x=linspace(-1,1,numPts)'; % Izlaz y y=0.8*sin(pi*x)+0.4*sin(3*pi*x)+0.2*sin(5*pi*x); % Pohrani podatke u matricu nazvana data; dio podataka je za fazu treniranja, a dio za fazu provjere data=[x y]; % ukupni skup podataka trndata = data(1:2:numPts,:); % skup podataka za treniranje chkdata = data(2:2:numPts,:); % skup podataka za provjeru % Nacrtaj podatke za treniranje (o) i podatke za provjeru (x) plot (trndata(:,1),trndata(:,2), 'o',chkdata(:,1),chkdata(:,2),'rx') grid title('Training data (x) and checking data (o)') xlabel('x'); ylabel('Measured data for y');

Ako se pokrene m-file sinF, odgovor je:

Slika 3. Nelinearna funkcija f

Inicijalizacija fuzzy sistema (m-file: sinFgen1.m) Nije uvjek na poetku jednostavno uoiti kakav e inicijalni fuzzy system biti, po pitanju broja i tipa funkcija pripadnosti. U tu svrhu u Matlabu je mogue iskoristiti komandu genfis1. Ova komanda e prolazei kroz sve podatke odabrati karakteristike sistema sa kojim se poinje. U tu svrhu pozivamo m-file (sinFgen1.m), koji je: % Primjeni genfis1 da bi se generisao poetni skup funkcija pripadnosti. nummfs=5; % broj funkcija pripadnosti mftype='gbellmf'; tip funkcija pripadnosti je generalized bell fismat = genfis1(trndata,nummfs,mftype); % umjesto posljednja tri reda mogue je iskoristiti i: fismat = genfis1(trndata,5,'gbellmf','linear'); % nacrtaj poetne funkcije pripadnosti figure(2) plotmf(fismat,'input',1) % nacrtaj strukturu FIS-a figure(3) plotfis(fismat)

Ako se pokrene m-file sinFgen1, odgovor je:

Slika 4. Poetne funkcije pripadnosti

Slika 5. Struktura Anfis-a; 1 ulaz, 1 izlaz i 5 pravila

Zadavanje drugih parametara za uenje i poetak procesa uenja

U Fuzzy Control Toolbox-u postoji korisna komanda nazvana anfis. Ovom komandom je obezbjeena optimizaciona ema kojom se odreuju parametri fuzzy sistema koji najbolje odgovaraju skupu ulazno-izlaznih podataka. Zaponimo optimizacionu proceduru pozivanjem sinFanfis.m: % odredi brij iteracija numepochs = 40; % zaponi optimizaciju [fismat1, trnerr, ss, fismat2, chkerr]=anfis(trndata, fismat, numepochs, NaN, chkdata); % ili umjestoprethodna dva reda mogue je zapisati komandu i u jednom redu %[fismat1, trnerr, ss, fismat2, chkerr]=anfis(trndata, fismat, [40 NaN NaN NaN NaN], [1 1 1 1], chkdata, 1); % ukoliko elimo znati mimimalnu greku trenitanja minimal_taining_RMSE = min(trnerr) minimal_checking_RMSE = min(chkerr) % prikai greku na podacima za treniranje figure(4) plot (trnerr) xlabel('Epochs') ylabel('Trn. error') % prikai greku na podacima za provjeru figure(5) plot (chkerr) xlabel('Epochs') ylabel('Chk. error') % prikai podeene funkcije pripadnosti figure(6) plotmf(fismat1,'input',1) Na monitoru raunara e se pojaviti slijedei odgovor: ANFIS info: Number of nodes: 24 Number of linear parameters: 10 Number of nonlinear parameters: 15 Total number of parameters: 25 Number of training data pairs: 26 Number of checking data pairs: 25 Number of fuzzy rules: 5 Start training ANFIS ... 7

1 0.122403 0.11919 2 0.118275 0.115235 3 0.114078 0.111197 4 0.109758 0.107021 5 0.105274 0.102662 Step size increases to 0.011000 after epoch 5. 6 0.100593 0.0980892 Step size decreases to 0.008645 after epoch 39. 40 0.0323769 0.0348307 Designated epoch number reached --> ANFIS training completed at epoch 40. minimal_taining_RMSE = 0.0314 minimal_checking_RMSE = 0.0330

Slika 6. Greka na podacima za treniranje

Slika 7. Greka na podacima za provjeru

Slika 8. Podeene funkcije pripadnosti

Testiranje modela Da bi se testirao model na podacima koji se nisu koristili u proceduri treninga koristi se komanda evelfis. Prikai na istom dijagramu krivu koja predstavlja odziv fuzzy sistema i krivu stvarnih podataka za provjeru. U ovu svrhu formiran je m-file sinFevalfis.m), koji je: % Odredi izlaz anfis-a (out) koristei komandu 'evalfis' out=evalfis(chkdata(:,1),fismat1); % Prikai izlaz y figure(7) hold; plot(chkdata(:,1),out); % Prikai izlaz iz anfis-a (out) u funkciji podataka za provjeru (25 podataka) plot(chkdata(:,1),chkdata(:,2),'g') % Prikai stvarni izlaz y u funkciji podataka za provjeru (25 podataka) plot(x,y,'r') % Prikai stvarni izlaz y u funkciji svih ulaznih podataka x (51 podatak) legend('y - anfis', 'y - chkdata', 'y - all data',2) xlabel('x') ylabel('function y') grid Odgovor Matlab-a je:

10

Slika 9. Izlaz anfis-a, nelinearna funkcija f

Neke korisne informacije koje mogue dobiti o sistemu MATLAB funkcija showfis prikazuje karakteristike fuzzy sistema. >> showfis(fismat1) 1. Name anfis 2. Type sugeno 3. Inputs/Outputs [1 1] 4. NumInputMFs 5 5. NumOutputMFs 5 6. NumRules 5 7. AndMethod prod 8. OrMethod max 9. ImpMethod prod 10. AggMethod max 11. DefuzzMethod wtaver 12. InLabels input1 13. OutLabels output 14. InRange [-1 1] 15. OutRange [-0.9022 0.9022] 16. InMFLabels in1mf1 17. in1mf2

11

18. in1mf3 19. in1mf4 20. in1mf5 21. OutMFLabels out1mf1 22. out1mf2 23. out1mf3 24. out1mf4 25. out1mf5 26. InMFTypes gbellmf 27. gbellmf 28. gbellmf 29. gbellmf 30. gbellmf 31. OutMFTypes linear 32. linear 33. linear 34. linear 35. linear 36. InMFParams [0.173 2 -1.067 0] 37. [0.2812 2.004 -0.497 0] 38. [0.1358 1.999 2.376e-011 0] 39. [0.2812 2.004 0.497 0] 40. [0.173 2 1.067 0] 41. OutMFParams [-9.404 -9.362 0 0] 42. [-0.07385 -0.522 0 0] 43. [9.108 3.493e-011 0 0] 44. [-0.07385 0.522 0 0] 45. [-9.404 9.362 0 0]

MATLAB funkcija showrule prikazuje formirana pravila fuzzy sistema. >> showrule(fismat1) ans = 1. If (input1 is in1mf1) then (output is out1mf1) (1) 2. If (input1 is in1mf2) then (output is out1mf2) (1) 3. If (input1 is in1mf3) then (output is out1mf3) (1) 4. If (input1 is in1mf4) then (output is out1mf4) (1) 5. If (input1 is in1mf5) then (output is out1mf5) (1) Na osnovu informacije o parametrima ulaznih funkcija pripadnosti i informacije o izlaznim parametrima Sugeno fuzzy sistema prvog reda (linearnog) mogue je zapisati funkciju pripadnosti, te izlaznu sistema Na primjer, iz prethodne liste moe se zakljuiti da: in1mf1 je [0.173 2 -1.067 0].

12

Za model je izabrana generalized bell funkcija pripadnosti:

gbellmf ( x; a , b, c) =

1 x c 1+ a
2b

tako da je na osnovu parametara funkcija pripadnosti oblika :

in1mf 1( x; a , b, c) =

1 x (1.067) 1+ 0.173
22

Izlaz (polinom prvog reda), oznaen kao out1mf1, ima slijedee parametre [-9.404 -9.362 0 0]. To znai da je izlaz prvog pravila:
1 y1 = p1 0 + p 1 x = 9.404 9.362 x

MATLAB funkcija ruleview prikazuje grafiki pravila, u svakom momentu fuzzy procesa zakljuivanja od ulaza do izlaza. Svaki red na dijagramu odgovara jednom pravilu, a svaka kolona dijagrama odgovara ulaznoj varijabli (uta, na lijevoj strani) ili izlazlaznoj varijabli (plava, na desnoj strani). Mogue je promjeniti ulaz u system ili ukucavanjem tane vrijednosti u ulazni prozor (Input window) ili pomjeranjem duge crvene linije. >> ruleview(fismat1)

13

Slika 10. Grafiki prikaz pravila

Takoe je mogue dobiti i strukturu ANFIS modela, pozivanjem funkcije: >> anfisedit(fismat1)

Slika 11. ANFIS editor

14

a potom izborom desnog dugmeta Structure dobija se:

Slika 12. ANFIS struktura

Zadaa 1: 1a) Koristei istu nelinearnu funkciju iz primjera 1 izabrati razliit broj funkcija pripadnosti, te razliite tipove funkcija pripadnosti. Analizirati sliaj ako bi se u skup podataka dodao um. 1b) Izabrati proizvoljno drugu funkciju i ponoviti proceduru kao i u 1a).

Primjer 2. Primjeniti ANFIS za predikciju vremenske serije koristei postojee podatke u Matlabu iz tsdata.dat. Napomena: Vremenska serija je generisana pomou slijedee Mackey-Glass (MG) diferencijalne jednaine:

Ova vremenska serija je haotina tako da ne postoji jasno definisn period. Serija nee konvergirati ili divergirati, a trajektorija je veoma osjetljiva na poetne uslove. Ovo je ''reper'' problem za istraivae u oblasti neuronskih mrea i fuzzy modelovanja.

15

Za dobijanje vrijednosti vremenske serije, primjenjen je Runge-Kutta metod etvrtog reda koji daje numeriko rjeenje prethodne MG diferencijalne jednaine. Rezultat je pohranjen u file tsdata.dat. U dokumentu postoji 1201 podatak. Rjeenje Originalna vremenska serija prikazana je na slici 13.

Slika 13. Originalna vremenska serija

Prilikom predikcije vremenske serije, potrebno je znati vrijednosti vremenske serije do neke take u vremenu, na primjer t, kako bi se dobile vrijednosti u nekoj taki u budunosti, na primjer t+P. Standardni metod za ovu vrstu predikcije je kreiranje mapiranja iz D ulaznih taaka, uzorkovanih svake jedinice u vremenu (x(t-(D-1)),..., x(t-), x(t)), za predikciju budue vrijednosti x(t+P). Koristei konvencionalno postavljenje za predikciju MG vremenske serije izabrano je D=4 i = P = 6. Formirana je matrica data sa 5 kolona: data(t)=[x(t-18) x(t-12) x(t-6) x(t) x(t+6)]. Prve etiri kolone matrice data predstavljaju ulaze, a posljednja kolona izlaz. Ukupan broj ulazno/izlaznih parova je 1000. Prvih 500 vrijednosti podataka predstavlja skup podataka za trening anfis sistema, dok se ostali podaci koriste kao podaci za provjeru na osnovu kojih se provjerava validnost identifikovanog fuzzy modela. Ovo rezultira sa dvije strukture podataka od po 500 taaka: trndata and chkdata.

16

Da bi zapoelo treniranje, potrebna je najprije formirati inicijalnu FIS struktura. Funkcija genfis1 postavlja poetni parametri FIS-a. Ukupno je postavljenjo osam funkcija pripadnosti, po dvije 'generalized bell' funkcije za svaki od etiri ulaza (Slika 14).

Slika 14. Poetne funkcije pripadnosti za etiri ulaza FIS

Generisana FIS struktura sadri 16 fuzzy pravila sa 104 (24 nelinearna i 80 linearnih) parametara. Da bi se postigli to bolji rezultati vano je imati broj paraova za treniranje nekoliko puta vei od broja parametara koji se estimiraju. U ovom primjeru odnos izmedju podataka i parametara je 5 (500/104). Da bi zapoeo trening potrebno je iskoristiti funkciju anfis. Za opcije treniranja i prikaza vrijednosti treniranja na ekranu su prihvaene vrijednosti po postavljenju u Matlab-u. Potrebno je oko minute na PC-Pentium za 10 epoha treniranja. Podeene funkcije pripadnosti su:

17

Slika 15. Podeene funkcije pripadnosti za etiri ulaza FIS

Da bi se potvrdila FIS struktura formirana funkcijom anfis (fismat) koristi se funkcija evalfis primjenjena na podatke za provjetu. Razlika izmedju originalne mG vremenske serije i vrijednosti dobivene anfis-om su veoma male. Na prvom dijagramu slike 16 crvene take predstavljaju izlaz iz anfis-a, dok plava linija predstavlja originalni izlaz iz podataka za provjeru. Greka predikcije prikazana je na drugom dijagramu slike 16.

18

Slika 16. Vremenska serija originalna (plava linija) i anfis (crvene takice); Greka predikcije (donji dijagram)

U predstavljenom primjeru rezultati su dobiveni nakon samo 10 epoha treniranja. Za bolje preformanse sistema potrebno je primjeniti intenzivnije treniranje. Napisan je slijedi kod u svrhu dobijanja poterbnih rezultata (file: TSpred.m): load tsdata.dat % uitati podatke iz tsdata.dat t=tsdata(:,1); % definisati parametar t x=tsdata(:,2); % definisati parametar x % prikai podatke figure(1) plot(t,x) xlabel('t(sec)') ylabel('time series') % formirati matricu sa 1000 podataka % prve 4 kolone oredstavljaju 4 ulaza a posljednja kolona je izlaz for t=118:1117 data(t-117,:)=[x(t-18) x(t-12) x(t-6) x(t) x(t+6)]; end % definisati podatke za trening i provjeru trndata=data(1:500,:); 19

chkdata=data(501:end,:); % inicijalizirati Fis tsfismat=genfis1(trndata); % prikazati Mfs figure(2) subplot(2,2,1) plotmf(tsfismat, 'input', 1) subplot(2,2,2) plotmf(tsfismat, 'input', 2) subplot(2,2,3) plotmf(tsfismat, 'input', 3) subplot(2,2,4) plotmf(tsfismat, 'input', 4) % poetak prosesa uenja [fismat1,error1,ss,fismat2,error2] = anfis(trndata,tsfismat,[],[],chkdata); mintrnerr=min(error1) %min training RMSE minchkerr=min(error2) %min chacking RMSE % adaptirane MF-je u proceduri uenja figure(3) subplot(2,2,1) plotmf(fismat2, 'input', 1) subplot(2,2,2) plotmf(fismat2, 'input', 2) subplot(2,2,3) plotmf(fismat2, 'input', 3) subplot(2,2,4) plotmf(fismat2, 'input', 4) % potvrda sistema out=evalfis(chkdata(:,1:4),fismat2); error=chkdata(:,5)-out % razlika izmedju stvarnog i anfis izlaza % prikai stvarni izlaz iz chkdata i izlaz iz anfis-a figure(4) subplot (2,1,1), plot(chkdata(:,5)) hold plot(out,'r.') xlabel('x') ylabel('time series') legend('time series - chkdata','time series - anfis') subplot (2,1,2), plot(err) xlabel('x') ylabel('prediction error') 20

Za dobijalje vie informacija o strukturi Anfisa-a, pravilima, te svim karakteristikama FIS-a koriste se funkcije: - anfisedit, - showrule i - showfis, respektivno. Slijedi odziv na navedene funkcije. >> anfisedit(fismat2)

Slika 17. Struktura ANFIS modela

>> showrule(fismat1) ans = 1. If (input1 is in1mf1) and (input2 is in2mf1) and (input3 is in3mf1) and (input4 is in4mf1) then (output is out1mf1) (1) 2. If (input1 is in1mf1) and (input2 is in2mf1) and (input3 is in3mf1) and (input4 is in4mf2) then (output is out1mf2) (1) 3. If (input1 is in1mf1) and (input2 is in2mf1) and (input3 is in3mf2) and (input4 is in4mf1) then (output is out1mf3) (1) 4. If (input1 is in1mf1) and (input2 is in2mf1) and (input3 is in3mf2) and (input4 is in4mf2) then (output is out1mf4) (1) 5. If (input1 is in1mf1) and (input2 is in2mf2) and (input3 is in3mf1) and (input4 is in4mf1) then (output is out1mf5) (1) 6. If (input1 is in1mf1) and (input2 is in2mf2) and (input3 is in3mf1) and (input4 is in4mf2) then (output is out1mf6) (1) 7. If (input1 is in1mf1) and (input2 is in2mf2) and (input3 is in3mf2) and (input4 is in4mf1) then (output is out1mf7) (1)

21

8. If (input1 is in1mf1) and (input2 is in2mf2) and (input3 is in3mf2) and (input4 is in4mf2) then (output is out1mf8) (1) 9. If (input1 is in1mf2) and (input2 is in2mf1) and (input3 is in3mf1) and (input4 is in4mf1) then (output is out1mf9) (1) 10. If (input1 is in1mf2) and (input2 is in2mf1) and (input3 is in3mf1) and (input4 is in4mf2) then (output is out1mf10) (1) 11. If (input1 is in1mf2) and (input2 is in2mf1) and (input3 is in3mf2) and (input4 is in4mf1) then (output is out1mf11) (1) 12. If (input1 is in1mf2) and (input2 is in2mf1) and (input3 is in3mf2) and (input4 is in4mf2) then (output is out1mf12) (1) 13. If (input1 is in1mf2) and (input2 is in2mf2) and (input3 is in3mf1) and (input4 is in4mf1) then (output is out1mf13) (1) 14. If (input1 is in1mf2) and (input2 is in2mf2) and (input3 is in3mf1) and (input4 is in4mf2) then (output is out1mf14) (1) 15. If (input1 is in1mf2) and (input2 is in2mf2) and (input3 is in3mf2) and (input4 is in4mf1) then (output is out1mf15) (1) 16. If (input1 is in1mf2) and (input2 is in2mf2) and (input3 is in3mf2) and (input4 is in4mf2) then (output is out1mf16) (1)

>> showfis(fismat1) 1. Name anfis 2. Type sugeno 3. Inputs/Outputs [4 1] 4. NumInputMFs [2 2 2 2] 5. NumOutputMFs 16 6. NumRules 16 7. AndMethod prod 8. OrMethod max 9. ImpMethod prod 10. AggMethod max 11. DefuzzMethod wtaver 12. InLabels input1 13. input2 14. input3 15. input4 16. OutLabels output 17. InRange [0.4256 1.314] 18. [0.4256 1.314] 19. [0.4256 1.314] 20. [0.4256 1.314] 21. OutRange [0.4256 1.314] 22. InMFLabels in1mf1 23. in1mf2 24. in2mf1 25. in2mf2

22

26. in3mf1 27. in3mf2 28. in4mf1 29. in4mf2 30. OutMFLabels out1mf1 31. out1mf2 32. out1mf3 33. out1mf4 34. out1mf5 35. out1mf6 36. out1mf7 37. out1mf8 38. out1mf9 39. out1mf10 40. out1mf11 41. out1mf12 42. out1mf13 43. out1mf14 44. out1mf15 45. out1mf16 46. InMFTypes gbellmf 47. gbellmf 48. gbellmf 49. gbellmf 50. gbellmf 51. gbellmf 52. gbellmf 53. gbellmf 54. OutMFTypes linear 55. linear 56. linear 57. linear 58. linear 59. linear 60. linear 61. linear 62. linear 63. linear 64. linear 65. linear 66. linear 67. linear 68. linear 69. linear 70. InMFParams [0.4652 2.001 0.4488 0] 71. [0.4125 1.998 1.349 0] 72. [0.484 2 0.4611 0] 23

73. [0.4546 1.995 1.33 0] 74. [0.4735 2 0.4533 0] 75. [0.4434 1.999 1.322 0] 76. [0.4607 2 0.4411 0] 77. [0.439 2 1.32 0] 78. OutMFParams [0.5719 -0.05799 0.4558 1.491 -0.7082] 79. [-1.241 1.259 -0.626 1.988 -0.6549] 80. [-0.08713 0.1479 3.99 -0.9461 -2.163] 81. [-0.8831 0.7941 -2.327 2.261 0.7133] 82. [-0.8007 3.257 -0.05279 -2.119 0.9689] 83. [6.419 -4.356 0.5138 -6.042 5.88] 84. [1.301 1.908 0.3286 1.113 -2.022] 85. [0.4515 -2.886 0.5285 0.01784 3.464] 86. [-1.009 0.7231 -0.2955 0.665 1.366] 87. [-0.499 -1.185 -1.001 2.359 0.8618] 88. [-1.235 -0.7923 0.2703 -0.05824 4.193] 89. [-3.364 1.418 0.7603 -0.1448 2.978] 90. [-0.7685 -0.5275 1.09 -1.229 1.59] 91. [-0.3496 -6.224 2.431 -0.05331 4.497] 92. [2.105 0.3808 -1.205 2.183 -3.241] 93. [0.004138 0.2479 -0.007847 0.5703 -0.3867] Zadaa 2. 2a) Koristei podatke iz primjera 2 izabrati razliit broj funkcija pripadnosti, razliite tipove funkcija pripadnosti, razliit broj epoha i razliite metode uenja. 2b) Napraviti prognozu za zadatu vremensku seriju.

24

APPENDIX To generate the initial FIS matrix use genfis1. Type help genfis1 in MATLAB to see the following. GENFIS1 Generates an initial Sugeno-type FIS for ANFIS training using a grid partition. FIS = GENFIS1(DATA) generates a single-output Sugeno-type fuzzy inference system (FIS) using a grid partition on the data (no clustering). FIS is used to provide initial conditions for ANFIS training. DATA is a matrix with N+1 columns where the first N columns contain data for each FIS input, and the last column contains the output data. By default, GENFIS1 uses two 'gbellmf' type membership functions for each input. Each rule generated by GENFIS1 has one output membership function, which is of type 'linear' by default. FIS = GENFIS1(DATA, [NUMMFS], 'INPUTMF', 'OUTPUTMF') explicitly specifies: * NUMMFS number of membership functions per input. A scalar value, specifies the same number for all inputs and a vector value specifies the number for each input individually. * INPUTMF type of membership function for each input. A single string specifies the same type for all inputs, a string array specifies the type for each input individually. * OUTPUTMF output membership function type, either 'linear' or 'constant' Example data = [rand(10,1) 10*rand(10,1)-5 rand(10,1)]; fis = genfis1(data,[3 7],char('pimf','trimf')); [x,mf] = plotmf(fis,'input',1); subplot(2,1,1), plot(x,mf); xlabel('input 1 (pimf)'); [x,mf] = plotmf(fis,'input',2); subplot(2,1,2), plot(x,mf); xlabel('input 2 (trimf)'); See also GENFIS2, ANFIS. The example generates the response

25

To determine the best FIS system use anfis. ANFIS Adaptive Neuro-Fuzzy training of Sugeno-type FIS. ANFIS uses a hybrid learning algorithm to identify the membership function parameters of single-output, Sugeno type fuzzy inference systems (FIS). A combination of least-squares and backpropagation gradient descent methods are used for training FIS membership function parameters to model a given set of input/output data. [FIS,ERROR] = ANFIS(TRNDATA) tunes the FIS parameters using the input/output training data stored in TRNDATA. For an FIS with N inputs, TRNDATA is a matrix with N+1 columns where the first N columns contain data for each FIS input and the last column contains the output data. ERROR is the array of root mean square training errors (difference between the FIS output and the training data output) at each epoch. ANFIS uses GENFIS1 to create a default FIS that is used as the starting point for ANFIS training. [FIS,ERROR] = ANFIS(TRNDATA,INITFIS) uses the FIS structure, INITFIS as the starting point for ANFIS training.
[FIS,ERROR,STEPSIZE]=ANFIS(TRNDATA,INITFIS,[TRNOPT],[DISPOPT],OPTMETHOD)

uses the vector TRNOPT to specify training options:

26

TRNOPT(1): training epoch number (default: 10) TRNOPT(2): training error goal (default: 0) TRNOPT(3): initial step size (default: 0.01) TRNOPT(4): step size decrease rate (default: 0.9) TRNOPT(5): step size increase rate (default: 1.1) The training process stops whenever the designated epoch number is reached or the training error goal is achieved. STEPSIZE is an array of step sizes. The step size is increased or decreased by multiplying it by the step size increase or decrease rate as specified in the training options. Entering NaN for any option will select the default value. Use the DISPOPT vector to specify display options during training. Select 1 to display, or 0 to hide information: DISPOPT(1): general ANFIS information (default: 1) DISPOPT(2): error (default: 1) DISPOPT(3): step size at each parameter update (default: 1) DISPOPT(4): final results (default: 1) OPTMETHOD selects the optimization method used in training. Select 1 to use the default hybrid method, which combines least squares estimation with backpropagation. Select 0 to use the backpropagation method. [FIS,ERROR,STEPSIZE,CHKFIS,CHKERROR] = ... ANFIS(TRNDATA,INITFIS,[TRNOPT],[DISPOPT],CHKDATA) uses the checking (validation) data CHKDATA to prevent overfitting of the training data set. CHKDATA has the same format as TRNDATA. Overfitting can be detected when the checking error (difference between the output from CHKFIS and the checking dat output) starts increasing while the training error is still decreasing. CHKFIS is the snapshot FIS taken when the checking data error reaches a minimum. CHKERROR is the array of the root mean squared, checking data errors at each epoch. Example x = (0:0.1:10)'; y = sin(2*x)./exp(x/5); epoch_n = 20; in_fis = genfis1([x y],5,'gbellmf'); out_fis = anfis([x y],in_fis,epoch_n); plot(x,y,x,evalfis(x,out_fis)); legend('Training Data','ANFIS Output'); See also GENFIS1, ANFISEDIT. The example generates the response ANFIS info: Number of nodes: 24 Number of linear parameters: 10 27

Number of nonlinear parameters: 15 Total number of parameters: 25 Number of training data pairs: 101 Number of checking data pairs: 0 Number of fuzzy rules: 5

Start training ANFIS ... 1 0.0694086 2 0.0680259 3 0.066663 4 0.0653198 5 0.0639961 Step size increases to 0.011000 after epoch 5. 6 0.0626917 ... 20 0.0423184 Designated epoch number reached --> ANFIS training completed at epoch 20.

28

To determine the output of the FIS system for given input use evalfis. EVALFIS Perform fuzzy inference calculations.

Y = EVALFIS(U,FIS) simulates the Fuzzy Inference System FIS for the input data U and returns the output data Y. For a system with N input variables and L output variables, * U is a M-by-N matrix, each row being a particular input vector * Y (name of output) is M-by-L matrix, each row being a particular output vector. Y = EVALFIS(U,FIS,NPts) further specifies number of sample points on which to evaluate the membership functions over the input or output range. If this argument is not used, the default value is 101 points. [Y,IRR,ORR,ARR] = EVALFIS(U,FIS) also returns the following range variables when U is a row vector (only one set of inputs is applied): * IRR: the result of evaluating the input values through the membership functions. This is a matrix of size Nr-by-N, where Nr is the number of rules, and N is the number of input variables. * ORR: the result of evaluating the output values through the membership functions. This is a matrix of size NPts-by-Nr*L. The first Nr columns of this matrix correspond to the first output, the next Nr columns correspond to the second output, and so forth. * ARR: the NPts-by-L matrix of the aggregate values sampled at NPts along the output range for each output. Example: fis = readfis('tipper'); out = evalfis([2 1; 4 9],fis)

See also READFIS, RULEVIEW, GENSURF. The example generates the response out = 7.0169 19.6810

29