Documente Academic
Documente Profesional
Documente Cultură
Clasificatorul Bayes naiv (CBN) face parte din categoria tehnicilor de învățare automată
supervizată. Principial, folosește ipoteze și metode statistice pentru ca, pe baza unui set de date conținând
instanțe compuse dintr-o serie de atribute (trăsături) care sunt deja clasificate, să fie învățat un clasificator
care pentru o nouă instanță de date să estimeze apartanența la una dintre clasele existente prin intermediul
unei metrici de probabilitate maximală.
P( x1 ,..., x d | y j ) P( y j ) , (1)
P( y j | x1 ,..., x d )
P( x1 ,..., x d )
în care:
T
- P( y j | x1 ,..., x d ) este probabilitatea ca instanța cu atributele de valoare x [ x 1 ... x d ] să
aparțină clasei j,
- P( x1 ,..., x d | y j ) este probabilitatea ca în clasa j să apară instanța cu atributele de valoare
x [ x 1 ... x d ] T .
- P( y j ) este probabilitatea ca o instanță să aparțină clasei j,
T
- P( x1 ,..., x d ) este probabilitatea de apariție a instanței x [ x 1 ... x d ] .
Ipoteza fundamentală a CBN este că atributele instanței de date sunt variabile aleatoare
independente, deci necorelate statistic. Chiar dacă în multe aplicații această ipoteză nu este respectată,
CBN s-a dovedit a fi un clasificator foarte robust la încălcarea ei. Datorită acestei ipoteze, probabilitatea
de apariție a evenimentului x [ x 1 ... x d ] T (care înseamnă de fapt apariția concomitentă a valorilor
(realizărilor) x1 , x 2 ,..., x d pentru atributele instanței respective și care poate fi exprimat în notație
d
probabilistică și sub forma x1 x 2 ... x d ) în clasa j, poate fi scris ca P( x1 ,..., x d | y j ) P( xi | y j )
i 1
. Deoarece numitorul din relația (1) nu depinde de clasa j, rezultă că probabilitatea de apartenență la o
clasă oarecare j este proporțională doar cu numărătorul fracției din (1)
d
P ( y j | x1 ,..., x d ) P( y j ) P( x i | y j ) . (2)
i 1
Odată calculabil membrul stâng al expresiei (2), se poate face o clasificare prin care se decide la
care clasă aparține instanța (realizarea) curentă x , rezolvând problema de optimizare
d
j * arg max P ( y j ) P ( x i | y j ) . (3)
j 1, K i 1
Tipuri de atribute
M.-B. Radac, 2018, UPT
În practică atributele sunt numerice sau reductibile la numerice și pot lua valori în mulțimi continue
sau în mulțimi discrete (atribute categoriale). Atributele continue sunt caracterizate de funcții de densitate
de probabilitate (f.d.p) continue (de ex. normală sau de alt tip), cele categoriale fiind reprezentabile prin
f.d.p. discrete (histograme). Atribute categoriale de forma {‘Alb’,’Negru’} sau de forma
{‘Negativ’,’Zero’,’Pozitiv’} sunt ușor codificabile numeric. Spre exemplu, un atribut numeric continuu
caracterizat de o distribuție normală (gaussiană) va avea o f.d.p. de forma:
( xi j ) 2
1 2 2j
, (4)
P ( x xi | y j ) e
22j
cu media j
și dispersia j
estimate din date. Probabilitatea unei valori pentru un atribut
oarecare poate fi obținută evaluând expresia (4) pentru o valoare concretă x i a unui atribut.
Exemplu 1. Fie setul de date redat mai jos (Leon, 2017) care centralizează decizia de a practica o activitate
sportivă în aer liber în funcție de condițiile exterioare.
Se cere luarea undei decizii în condițiile exterioare redate în tabelul de mai jos:
- Probabilitatea de apariție a clasei ‘Da’ este P ( y ' Da ' ) 8 / 14 iar a clasei ‘Nu’ este
P ( y ' Nu ' ) 6 / 14 ,
- Probabilitățile valorilor atributelor din instanța 15 condiționate de clasa ‘Da’ sunt:
P ( x 1 ' S ' | y ' Da ' ) 1 / 8 , P ( x 2 ' M ' | y ' Da ' ) 2 / 8 ,
P ( x 3 ' N ' | y ' Da ' ) 5 / 8 și P ( x 3 ' A ' | y ' Da ' ) 6 / 8 .
2
M.-B. Radac, 2018, UPT
După cum s-a putut observa în exemplul anterior, atributele sunt categoriale și probabilitățile de
apariție a valorilor discrete pot fi calculate prin numărare. Există situații practice (mai ales pentru un set de
date de mici dimensiuni ) atunci când, pentru anumite clase, frecvența de apariție a unei valori a unui atribut
este zero, ceea ce duce la o probabilitate nulă în expresia (3). Pentru aceste situații se recomandă netezirea
(numită și corecția) Laplace, care înlocuiește formula de calcul
nij
P ( xi | y j ) , (12)
nj
în care nij este numărul aparițiilor valorii xi pentru un atribut oarecare în cadul celor nj apariții ale
clasei j, cu formula
nij 1
P ( xi | y j ) . (13)
nj K
Fig. 1 Primele 20 de cifre din setul de date cu imagini care conțin cifrele zecimale digitalizate în format pixel.
3
M.-B. Radac, 2018, UPT
Inițial, fiecare imagine stocată ca o matrice va fi transformată într-un vector de 784 de atribute cu fiecare
atribut luând valori în intervalul [0;1] prin normalizarea prin împărțire a celor 256 de valori din mulțimea
{0,…255} la valoarea 255. Pentru că valorile numerice ale fiecărui atribut sunt 256 de numere bine
precizate, atributele vor fi considerate categoriale. Deoarece sunt 784 atribute a câte 256 de valori numerice
per fiecare atribut, se reduce în continuare numărul valorilor posibile ale fiecărui atribut prin transformarea
imaginii în tonuri de alb și negru. Practic, orice pixel de valoare mai mare sau egală cu 0.5 va lua valoarea
1 și va avea valoarea 0 altfel. Pentru ca Matlab să nu interpreteze matricele imagine ca fiind de tip logic (ar
provoca eroare la antrenarea clasificatorului), se înmulțește cu 2 fiecare pixel, astfel că atributele pot lua
doar valorile {0,2}.
Codul Matlab de mai jos redă antrenarea unui clasificator CBN pentru 10 clase de apartenență
aferente celor 10 cifre zecimale.
1 COD 1
2 % ------------------clasificare_NaiveBayes.m----------------------- %
3 clear
4 [xTrainImages, tTrain] = digittrain_dataset;
5
6 % afiseaza cateva imagini de antrenare
7 clf
8 for i = 1:20
9 subplot(4,5,i);
10 imshow(xTrainImages{i});
11 end
12
13 % dimensiunea imaginii conduce la dimensiunea vectorului de intrare prin
14 % stivuirea matricei de pixeli
15 imageWidth = 28;imageHeight = 28;
16 inputSize = imageWidth*imageHeight;
17
18 % fiecare matrice imagine este transf. in vector coloana
19 xTrain = zeros(inputSize, numel(xTrainImages));
20 for i = 1:numel(xTrainImages)
21 xTrain(:,i) = xTrainImages{i}(:);
22 end
23
24 xTrain=(xTrain>0.5)*2; % imaginile sunt transformate Alb-Negru (pixeli {0,2},
25 %nu {0,1} pentru ca da eroare matrice nenumerica
26 % calculeaza vectorul iesirilor (tintele) din matrice rara in 10 clase
27 tTrainClasses=zeros(numel(xTrainImages),1);
28 for i=1:numel(tTrainClasses)
29 tTrainClasses(i)=find(tTrain(:,i),1);
30 end
31 % acelasi rezultat se obtine cu tTrainClasses=vec2ind(tTrain)';
32
33 % de aici incepe antrenarea clasificatorului Naive Bayes
34 %Mdl=fitcnb(xTrain',tTrainClasses);
35 tic
36 %Mdl=fitcnb(xTrain',tTrainClasses,'CategoricalPredictors','all','ScoreTransform','logit');
37 Mdl=fitcnb(xTrain',tTrainClasses,'CategoricalPredictors','all');
38 toc
39 % fiecare atribut este de tip categoric si ii coresp. o distributie de tip 'mvmn' multivariabila multinomiala
40 % Mdl.CategoricalLevels{i} contine toate nivelele (binurile) pentru atributul i
41 % Mdl.DistributionParameters{j,i}(L) contine probabilitatile ca atributul i de nivel L sa apartina clasei k
4
M.-B. Radac, 2018, UPT
42
43 % Incarca imaginile de test
44 [xTestImages, tTest] = digittest_dataset;
45 % imaginile de test sunt stivuite in vector coloana si puse in matrice
46 xTest = zeros(inputSize, numel(xTestImages));
47 for i = 1:numel(xTestImages)
48 xTest(:,i) = xTestImages{i}(:);
49 end
50
51 xTest=(xTest>0.5)*2; % imaginile de test sunt transformate Alb-Negru (pixeli {0,2}
52
53 y = predict(Mdl,xTest(:,:)');
54
55 % transforma manual predictiile de apartenenta a instantelor la o clasa in
56 % matrice rara. Acelasi rezultate se obtine cu functia full(ind2vec(y))
57 tTestClasses=zeros(10,5000);
58 for i=1:size(tTestClasses,2)
59 tTestClasses(y(i),i)=1;
60 end
61
62 %afiseaza matricea confuziilor
63 plotconfusion(tTest,tTestClasses);
64 %--------------------------------------------------------------------------------------%
După antrenarea clasificatorului CBN, cele 5000 de imagini de test sunt de asemenea aduse în
format alb-negru, este testată performanța clasificatorului folosind funcția ‘predict’ și se afișează matricea
confuziilor din Fig. 2 de mai jos.
5
M.-B. Radac, 2018
Fig. 2 Matricea confuziilor pentru CBN antrenat pe setul de imagini digitalizate ale cifrelor zecimale.
Exercitii propuse:
1) Realizați o documentație a funcției fitcnb din Matlab care să cuprindă o descriere a funcționalităților,
prezentarea argumentelor de intrare și de ieșire, a parametrilor funcției, informații despre algoritmul
care stă la baza implementării, precum și diverse exemple de rulare și afișare a datelor.
2) Să se implementeze în variantă proprie un clasificator CBN pentru problema de clasificare a
imaginilor din Exercițiul 1 rezolvat mai sus.
3) Setul Wisconsin Breast Cancer Dataset (WBCD) (Lichman, 2013) de pe UCI Machine learning
Repository este un set de date folosit în probleme de clasificare. Setul conține instanțe cu 32 de
atribute de intrare calculate din imagini digitale ale unor probe de biopsie recoltate care descriu
caracteristicile nucleelor celulare prezente în imagini. Setul de date este pregătit în format .dat care
poate fi importat în Matlab. Toate aceste atribute sunt numere reale pe diverse scări de amplitudine.
În total există 569 de instanțe. Atributul de clasificare de ieșire este ‘M’ – malign sau ‘B’ – benign
și stabilește dacă proba recoltată este canceroasă sau nu. Acest atribut de clasă poate fi convertit
la valoare numerică (1, respectiv 0, sau 1 respectiv –1), sau la orice alte valori.
Prima coloană din setul de date reprezintă un număr de identificare (ID) al instanței, a doua coloană
reprezintă atributul de ieșire la clasificare pentru învățare supervizată (malign sau benign), celelalte
atribute de învățare încep cu coloana a treia.
Sunt extrase doar primele două atribute de învățare (coloanele 3 și 4) și sunt afișate corespunzător
în Fig. 4 de mai jos. Aceste atribute reprezintă raza medie a nucleelor celulare și respectiv textura
acestora măsurată ca deviația standard a valorii grayscale a pixelilor.
6
M.-B. Radac, 2018
Fig. 4 Instanțele aferente primelor două atribute din setul de date WBCD clasificate corespunzator ca benign (0) si malign (1).
Se cere să se antreneze și să se testeze un clasificator Naïve Bayes folosind atât funcția specifică
din Matlab cât și funcția în implementare proprie, pentru clasificarea datelor WBCD.
Datele vor fi împărțite în date de antrenare (primele 500 de instanțe) și restul de testare/validare.
Regresia Logistică
Regresia logistică reprezintă una dintre cele mai utilizate și mai simple tehnici de clasificare, în
particular, de clasificare binară. Robustețea tehnicii se datorează simplității structurii clasificatorului, care
combină afin atributele instanței de date pentru a le trece printr-o funcție de activare care beneficiază de o
interpretare probabilistică. Expresia care prelucrează atributele (intrările clasificatorului) poartă denumirea
de ipoteză iar în cazul unui clasificator binar poate avea expresia
1
hθ (x) T
, (14)
1 e θ x
în care θ [1,..., n ] Rn este vectorul parametrilor ipotezei, h( z) 1/(1 e z ) este funcția logistică
care dă și numele tehnicii, x [ x1,..., xn1 ,1] R n este vectorul atributelor (din care n-1 atribute sunt efective
iar atributul ”1” este implicit și va fi folosit ca și intrare de prag). Astfel încât z θT x 1 x1 ... n1 xn1 n
reprezintă combinația liniar afină a atributelor. Ipoteza este greșit etichetată uneori ca fiind o structură
liniară, funcția de activare logistică dovedind de fapt neliniaritatea. Însă, în literatura statistică, ipoteza (14)
face parte din clasa mai largă a modelelor liniare generalizate (engl. Generalized Linear Model) de regresie,
numitorul comun al acestora fiind faptul că parametrii modelului combină liniar afin atributele instanțelor.
În Fig. 6 de mai jos poate fi observat că funcția logistică h(z) ia valori în intervalul [0;1] și că h(0)=0.5.
Interpretarea probabilistică se traduce prin aceea că valoarea h(z) se asociază în mod uzual probabilității
de producere a unui eveniment, o valoare h(z) mai mare fiind echivalentă unei șanse mai mari de apariție.
Spre exemplu, în problemele de clasificarea binară, este de dorit clasificarea instanțelor în
pozitive/negative, 0/1, câine/pisică, etc. h(z) poate reprezenta probabilitatea ca instanța care produce
z θ T x să aparțină clasei pozitive. Depășirea pragului de decizie de h(0)=0.5 însemnând că instanța
aparține clasei pozitive iar situarea sub pragul de decizie de 0.5 însemnând că instanța aparține clasei
negative. z θT x 0 este o hipersuprafață de decizie care are exact același rol de margine de separație
ca și în cazul mașinilor cu vectori suport. Această hipersuprafață țintește polarizarea cât mai eficientă a
predicțiilor față de pragul de 0.5 și apropierea lor de valorile țintă aferente instanțelor respective.
7
M.-B. Radac, 2018
Fie un set de date {x i , yi }, i 1, m care conține m instanțe în care ieșirile etichetate yi {0,1} denotă
apartenența la o clasă negativă respectiv pozitivă, câine/pisică, etc. În general, codificarea valorilor yi nu
trebuie obligatoriu făcută la valorile 0/1, însă în cazul regresiei logistice, valorile yi vor fi ținte pentru
antrenarea clasificatorului binar.
Este necesară găsirea unei funcții de cost adecvate pentru identificarea parametrilor ipotezei.
Utilizarea FC MSE nu este întotdeauna una potrivită, datorită neliniarității predicției h(z) în raport cu θ , ce
poate afecta o soluționare numerică bazată pe metode de gradient. Se utilizează des FC de tip
crossentropy
1 m
J (θ) y j log(hθ (x j )) (1 y j ) log(1 hθ (x j )) ,
m j 1
(15)
care penalizează mai mult predicțiile greșite și mai puțin cele corecte (pentru y j 1 și hθ (x j ) 0
rezultă log(hθ (x j )) ; pentru y j 0 și hθ (x j ) 1 rezultă log(1 hθ (x j )) ).
Exemplu 3. În care problema de regresie logistică binară este tratată în două moduri: în mod direct prin
direct formularea și rezolvarea explicită a unei probleme de optimizare, respectiv indirect, prin utilizarea
unei rețele neuronale care, prin antrenare, rezolvă tot o problemă de optimizare.
Fie setul de date WBCD redus preluat ca set de date direct din mediul Matlab. Numărul atributelor
este 9, mai puține decât setul original (Lichman, 2013), iar valorile atributelor sunt normalizate. Din cele
699 de instanțe, primele 500 vor fi folosite pentru antrenare (aprox 70%), restul de 30% fiind folosite pentru
validare/testare.
1 COD 2
2 % ------------------clasificare_RegresieLogisticaOptimizare.m----------------------- %
3 clear
4 load cancer_dataset
8
M.-B. Radac, 2018
5 NTrain=500;
6 tgtTrain=vec2ind(cancerTargets(:,1:NTrain))-1;
7 tgtTest=vec2ind(cancerTargets(:,NTrain+1:end))-1;
8
9 %% -------cu minimizare crossentropy--------
10 NParams=size(cancerInputs,1)+1;NTrain=500;
11 P0=randn(NParams,1);
12 inputTrain=[cancerInputs(:,1:NTrain);ones(1,NTrain)];
13 % functia de cost crossentropy
14 mycrossEntropy=@(Param) -1/NTrain* (tgtTrain*log(logsig(inputTrain'*Param)) +(1-tgtTrain)*log(1-
15 logsig(inputTrain'*Param)))
16 P=fminsearch(mycrossEntropy,P0)
17
18 %testare roc si matrice confuzii pe setul de antrenare
19 predictTrain=ind2vec((logsig(inputTrain'*P)'>0.5)+1);
20 plotroc(ind2vec(tgtTrain+1),predictTrain)
21 plotconfusion(ind2vec(tgtTrain+1),predictTrain)
22 %testare roc si matrice confuzii pe setul de testare
23 inputTest=[cancerInputs(:,NTrain+1:end);ones(1,size(cancerInputs,2)-NTrain )];
24 predictTrain=ind2vec((logsig(inputTest'*P)'>0.5)+1);
25 plotroc(ind2vec(tgtTest+1),predictoriTest)
26 plotconfusion(ind2vec(tgtTest+1),predictoriTest)
27 %--------------------------------------------------------------------------------------%
Cea de-a doua abordare a soluției presupune crearea unei rețele neuronale cu arhitectură complet
personalizată, cu un singur strat de intrare, care să implementeze expresia ipotezei specifice regresiei
logistice. Funcția de activare este bineînțeles funcția logistică. Întrucât Matlab nu permite utilizarea FC de
tip crossentropy pentru probleme de clasificare binară în care codificarea țintelor se face folosind un singur
element de 0 sau 1 pe coloană, FC folosită la antrenare va fi MSE (mean sum of squared errors).
Implementarea este redată în secvența de cod următoare. Problema este specifică doar Matlab 2015, fiind
remediată în versiunile mai recente, în care este permisă utilizarea FC crossentropy standard atunci când
țintele sunt codificate binar.
1 COD 3
2 % ------------------clasificare_RegresieLogisticaReteaNeuronala.m----------------------- %
3 net2=network
4 net2.numInputs=1;net2.numLayers=1;net2.biasConnect=1;net2.inputConnect=1;
5 net2.layerConnect=0;net2.outputConnect=1;
6 net2.inputs{1}.size=9;net2.layers{1}.size=1;
7 net2.inputWeights{1}.initFcn='randsmall';net2.inputWeights{1}.learnFcn='learngdm';
8 net2.biases{1}.initFcn='randsmall';net2.biases{1}.learnFcn='traingdm';
9 net2.layers{1}.transferFcn='logsig';
10 net2.divideFcn='dividerand';net2.initFcn='initlay';
11 net2.performFcn='mse';net2.trainFcn='trainscg';
12 net2.plotFcns={'plotperform', 'plottrainstate','plotregression'};
13 net2=configure(net2,cancerInputs(:,1:NTrain),tgtTrain)
14 net2=init(net2)
15 view(net2)
16 net2.trainParam.min_grad=1e-20;
17 net2=train(net2,cancerInputs(:,1:NTrain),tgtTrain)
18 % afisare curbe ROC si matrice confuzii pe setul de antrenare
19 predictori=ind2vec((net2(cancerInputs(:,1:NTrain))>0.5)+1)
9
M.-B. Radac, 2018
20 plotroc(ind2vec(tgtTrain+1),predictori)
21 plotconfusion(ind2vec(tgtTrain+1),predictori)
22 % afisare curbe ROC si matrice confuzii pe setul de validare
23 predictoriTest=ind2vec((net2(cancerInputs(:,NTrain+1:end))>0.5)+1)
24 plotroc(ind2vec(tgtTest+1),predictoriTest)
25 plotconfusion(ind2vec(tgtTest+1),predictoriTest)
26 %--------------------------------------------------------------------------------------%
De remarcat faptul că, în cazul primei abordări bazate pe soluționarea unei probleme de optimizare
în mod direct, dacă s-ar fi folosit un algoritm bazat pe gradient (folosind de exemplu funcția fminunc),
calculul gradientului s-ar fi efectuat prin perturbarea valorilor parametrilor de la iterația (pasul) curent și
estimarea gradientului cu diferențe finite. Această abordare ar fi inferioară din punct de vedere
computațional algoritmului backpropagation folosit la antrenarea rețelei neuronale specifice celei de-a doua
abordări.
În Fig. 8 sunt redate curbele ROC pentru soluția regresiei logistice folosind optimizare (stânga sus
pe setul de antrenare, stânga jos pe setul de validare) și folosind rețea neuronală (dreapta sus pe setul de
antrenare, dreapta jos pe setul de validare).
În Fig. 9 sunt redate matricele confuziilor pentru soluția regresiei logistice folosind optimizare
(stânga sus pe setul de antrenare; stânga jos pe setul de validare) și folosind rețea neuronală (dreapta sus
pe setul de antrenare, dreapta jos pe cel de validare).
10
M.-B. Radac, 2018
Fig. 8 Curbele ROC pentru soluția regresiei logistice folosind optimizare (stânga sus pe setul de antrenare, stânga jos pe setul de
validare) și folosind rețea neuronală (dreapta sus pe setul de antrenare, dreapta jos pe setul de validare).
11
M.-B. Radac, 2018
Fig. 9 Matricea confuziilor pentru soluția regresiei logistice folosind optimizare (stânga sus pe setul de antrenare; stânga jos pe setul
de validare) și folosind rețea neuronală (dreapta sus pe setul de antrenare, dreapta jos pe cel de validare).
Pentru aplicarea regresiei logistice la clasificatori multiclasă cu K clase, cea mai simplă (dar naivă)
abordare este de a antrena K clasificatori binari (câte unul pentru fiecare clasă în parte, în care instanțele
din clasa respectivă sunt „pozitive”, restul de instanțe fiind „negative”) și de a rula fiecare instanță prin cei
K clasificatori binari, pentru a determina clasa finală de apartenență ca fiind cea care produce cel mai mare
scor de apartenență.
O altă strategie pentru implementarea unui clasificator multiclasă utilizând clasificatori binari este
de a antrena K(K-1)/2 clasificatori binari pentru clasele luate două câte două, după care orice instanță nouă
va aparține clasei care reiese de cele mai multe ori la rularea clasificatorilor binari. Cele două strategii
anterioare pot fi aplicate și la alți clasificatori binari cum ar fi mașinile cu vectori suport.
O rezolvare mai elegantă a problemei anterioare este dată de o arhitectură de rețea neuronală cu
funcție de activare de tip softmax pe ieșire definită de relația vectorială
ez
softmax(z) K
, z [ z1 ,..., z K ] R K . (16)
zj
e
j 1
zj
Practic, fiecare ieșire a rețelei neuronale va produce valoarea e care va fi apoi normalizată cu
K
zj
suma de la numitor. Astfel, fiecare valoare softmax( zi ) e zi / e
j 1
va reprezenta probabilitatea de
12
M.-B. Radac, 2018
Țintele unui astfel de clasificator multiclasă vor fi prezentate sub forma unei matrice cu număr de
coloane egal cu numărul de instanțe de antrenare, fiecare coloană având un număr de linii egal cu K, cu
toate elementele de valoare 0 exceptând linia care corespunde clasei țintă, care va conține un element de
valoare 1.
Funcția de cost recomandată a fi utilizată în cazul acestei arhitecturi de clasificator multiclasă este
crossentropy.
Exerciții propuse:
Sugestie: Ieșirea unei astfel de rețele aferente unei instanțe de intrare ce trebuie clasificată este
un vector de K valori numerice (K – numărul de clase) care se însumează la valoarea 1, ele
reprezentând probabilități de apartenență la clasă. Predictorul de apartenență la o clasă trebuie să
fie un vector care are valoarea 1 doar pe linia aferentă clasei predictate și în rest 0. Pentru că și
țintele sunt astfel structurate.
1 COD 4
2 % ------------------clasificare_RegresieLogistica_sotfmax_MNIST.m----------------------- %
3 clear
4 [xTrainImages, tTrain] = digittrain_dataset;
5
6 % afiseaza cateva imagini de antrenare
7 clf
8 for i = 1:20
9 subplot(4,5,i);
10 imshow(xTrainImages{i});
11 end
12
13 % dimensiunea imaginii conduce la dimensiunea vectorului de intrare prin
14 % stivuirea matricei de pixeli
15 imageWidth = 28;imageHeight = 28;
16 inputSize = imageWidth*imageHeight;
13
M.-B. Radac, 2018
17
18 % fiecare matrice imagine este transf. in vector coloana
19 xTrain = zeros(inputSize, numel(xTrainImages));
20 for i = 1:numel(xTrainImages)
21 xTrain(:,i) = xTrainImages{i}(:);
22 end
23
24 %% creeaza retea neuronala cu 1 singur strat, cu activare de tip softmax
25 net2=network
26 net2.numInputs=1;net2.numLayers=1;net2.biasConnect=1;net2.inputConnect=1;
27 net2.layerConnect=0;net2.outputConnect=1;
28 net2.inputs{1}.size=784;net2.layers{1}.size=1;
29 net2.inputWeights{1}.initFcn='randsmall';net2.inputWeights{1}.learnFcn='learngdm';
30 net2.biases{1}.initFcn='randsmall';net2.biases{1}.learnFcn='traingdm';
31 net2.layers{1}.transferFcn='softmax';
32 net2.divideFcn='dividerand';net2.initFcn='initlay';
33 net2.performFcn='crossentropy';net2.trainFcn='trainscg';
34 net2.plotFcns={'plotperform', 'plottrainstate','plotregression'};
35 net2=configure(net2,xTrain,tTrain)
36 net2=init(net2)
37 view(net2)
38 net2.trainParam.min_grad=1e-20;
39
40 %-------------------
41 % AICI COD ANTRENARE RETEA
42 %-------------------
43
44 % Incarca imaginile de test
45 [xTestImages, tTest] = digittest_dataset;
46 % imaginile de test sunt stivuite in vector coloana si puse in matrice
47 xTest = zeros(inputSize, numel(xTestImages));
48 for i = 1:numel(xTestImages)
49 xTest(:,i) = xTestImages{i}(:);
50 end
51
52 %-----------------
53 % AICI CALCUL PREDICTORI PE SET ANTRENARE SI TESTARE,
54 % AFISARE CURBE ROC, AFISARE MATRICE CONFUZII
55 %-----------------
56 %--------------------------------------------------------------------------------------%
Fie așa-numita matrice (sau tabel) a confuziilor pentru o clasificare binară de tip pozitiv (P) și de
tip negativ (N), ca matricea care centralizează numărul de instanțe pozitive (P) în instanțe clasificate ca
real pozitive (RP) și fals negative (FN) (numite și ratări), respectiv, numărul de instanțe negative clasificate
ca fals pozitive (FP) (numite și alarme false) și real negative (RN). Matricea este redată în Tabelul I de mai
jos.
14
M.-B. Radac, 2018
Clasele predictate
Clasele P N
reale P a (RP) b (FN)
N c (FP) d (RN)
a RP
Precizia se măsoară ca P REC
ac RP FP
a RP
Senzitivitatea (sau rapel) se măsoară ca S ENZ ,
ab RP FN
d RN
Specificitatea definită ca SPECIF ,
cd RN FP
Este dificil de caracterizat performanța unui clasificator atunci când există mai mulți indicatori. Sunt
utile în acest caz formule care ”combină” acești indicatori într-unul singur. Scorul F1 este un astfel de
indicator care poate fi folosit la compararea performanțelor clasificatorilor (Gorunescu, 2006):
2a 2 RP
Media armonică a preciziei și senzitivității, sau scorul F 1 .
2a b c 2 RP FN FP
Obiectivul teoretic al unui clasificator este să producă zero rezultate FP și FN, cu alte cuvinte,
un obiectiv al unui clasificator bun este să minimizeze FP+FN, însă:
În probleme de clasificare a cancerului, minimizarea FN (ratărilor) poate duce la ratarea unor
cazuri real canceroase, ceea ce este un mare dezavantaj. Este mai corect ca aceste cazuri să
fie clasificate ca FP (alarme false) pentru care se fac investigații suplimentare și se poate stabili
mai apoi un rezultat negativ,
În probleme de clasificare a mesajelor SPAM, minimizarea indicatorului FP (alarmelor false)
poate duce la mesaje care sunt importante dar sunt clasificate ca SPAM, ceea ce este un
dezavantaj. În cazul problemei de clasificare SPAM, este mai corect ca mesajele importante
să fie clasificate ca atare, putând fi mai apoi șterse manual sau reatribuite manual clasei
corecte.
Acuratețea este o metrică bună când datele din set sunt echilibrat divizate între cele două clase
dar trebuie complet evitat atunci când datele sunt dezechilibrate. În practică, acuratețea este
cel mai utilizat indicator.
Este recomandat să se calculeze indicatorii de performanță pe datele de validare/testare
folosind tehnica de validare încrucișată.
Curbele ROC (Receiver Operating Charateristic) care folosesc indicatorii RP (axa y) și FP (axa x)
sunt de asemenea utile în stabilirea performanțelor clasificatorilor, măsurînd aria diferenței dintre curba
ROC corespunzătoare modelului și prima bisectoare a graficului. Cu cât aria este mai apropiată de 0.5,
modelul de clasificare este mai performant, cu cât este mai aproape de 0 modelul este mai puțin performant,
comportându-se la întâmplare.
15
M.-B. Radac, 2018
Un exemplu de curbă ROC este redată în Fig. 5 de mai jos în urma utilizării funcției Matlab plotroc()
(Matlab, 2015). Pentru calculul curbelor ROC sunt necesare două seturi de date de validare de ieșire: ieșiri
țintă și ieșiri predictate. Setul de date al ieșirilor țintă conține o matrice cu număr de linii egal cu numărul
claselor și un număr de coloane egal cu numărul de instanțe din set. Pe fiecare linie apare o singură valoare
de ”1” care indică de fapt clasa țintă. Setul de date al ieșirilor predictate este reprezentat de o matrice care
are același număr de coloane egal cu numărul instanțelor din set iar pe fiecare coloană are cea mai mare
valoare pe linia care corespunde clasei predictate. Acest tip de reprezentare este frecvent întâlnit de
exemplu la clasificatori de tip RN cu strat de ieșire de tip softmax. Alternativ, pentru un clasificator binar,
setul de date de validare de ieșiri predictate poate avea o singură linie, pe fiecare poziție regăsindu-se o
valoare mai mică sau mai mare decât 0.5, valoare care corespunde apartenenței la clasa ”negativă” sau
”pozitivă”. Astfel de ieșiri pot fi produse de un clasificator logistic de regresie.
Pentru fiecare clasă a clasificatorului antrenat, este variat un prag în intervalul [0;1] iar pentru
fiecare valoare din interval vor fi calculate fracția instanțelor RP ca șinumărul instanțelor ale căror valori de
ieșire predictate au valoarea mai mare decât pragul, împărțit la numărul total al instanțelor ale căror valori
de ieșire țintă aparțin clasei RP ”1”, respectiv fracția instanțelor FP ca și numărul instanțelor ale căror valori
de ieșire predictate au valoarea sub prag, împărțit la numărul total al instanțelor ale căror valori de ieșire
țintă aparțin clasei RN ”0”).
Fig. 5 Exemplu de curbe ROC calculate pentru fiecare clasă (Matlab, 2015).
În alte probleme practice, se poate pune problema celui mai bun clasificator dată fiind acuratețea
și dimensiunea setului de date folosit la validare. În aceste situații sunt necesari indicatori specifici unor
teste statistice, de exemplu testul-T (Gorunescu, 2006), asupra cărora nu se insistă în lucrarea de față.
Bibliografie
F. Gorunescu (2006). Data Mining. Concepte Modele si Tehnici. Editura Albastră.
F. Leon (2017). Învățare Automată. Note de curs. Facultatea de Automatică și Calculatoare, Universitatea
Tehnică „Gh. Asachi” din Iași.
16
M.-B. Radac, 2018
Matlab (2015). Neural Networks Toolbox Documentation, Mathworks Inc., Natick, MA.
17