Sunteți pe pagina 1din 17

M.-B.

Radac, 2018, UPT

Clasificatorul Bayes naiv

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ă.

Fie x  [ x1 ... x d ] T   d o instanță de date și fie K numărul de clase notate y  j , j  1, K .


X   d poate fi interpretată ca fiind o variabilă aleatoare d-dimensională iar x   d este o realizare a
sa. Se dorește calculul probabilităților ca o instanță x să aparțină celor K clase, adică
P ( y  j | x1 ,..., x d ) . Folosind Teorema lui Bayes (care dă și numele clasificatorului) se poate scrie:

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
22j

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.

Nr. instanţă Starea vremii Temperatură Umiditate (x3) Vânt Joc


(x1) (x2) (x4) (y)
1 Soare (S) Mare (M) Mare (M) Absent (A) Nu
2 Soare Mare Mare Prezent (P) Nu
3 Înnorat (Î) Mare Mare Absent Da
4 Ploaie (P) Medie (med) Mare Absent Da
5 Ploaie Mică (m) Normală (N) Absent Da
6 Ploaie Mică Normală Prezent Nu
7 Înnorat Mică Normală Prezent Da
8 Soare Medie Mare Absent Nu
9 Soare Mică Normală Absent Da
10 Ploaie Medie Normală Absent Da
11 Soare Medie Normală Prezent Nu
12 Înnorat Medie Mare Prezent Da
13 Înnorat Mare Normală Absent Da
14 Ploaie Medie Mare Prezent Nu

Se cere luarea undei decizii în condițiile exterioare redate în tabelul de mai jos:

Nr. instanţă Starea vremii Temperatură Umiditate Vânt Joc


(x1) (x2) (x3) (x4) (y)
15 Soare Mare Normală Absent ?

Pot fi calculate următoarele mărimi:

- 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

- Probabilitățile valorilor atributelor din instanța 15 condiționate de clasa ‘Nu’ sunt:


P ( x 1  ' S ' | y  ' Nu ' )  4 / 6 , P ( x 2  ' M ' | y  ' Nu ' )  2 / 6 ,
P ( x 3  ' N ' | y  ' Nu ' )  2 / 6 și P ( x 3  ' A ' | y  ' Nu ' )  2 / 6 .
Prin urmare probabilitățile ca ultima instanță să aparțină claselor ‘Da’ și ‘Nu’ sunt
4
8 1 2 5 6
P ( y  ' Da ' )  P ( x i | y  ' Da ' )       83 . 7  10  4
i 1 14 8 8 8 8 . (11)
4
6 4 2 2 2
P ( y  ' Nu ' )  P ( x i | y  ' Nu ' )       105 . 82  10  4
i 1 14 6 6 6 6

Rezultă că în condițiile exterioare date de atributele instanței 15, activitatea sportivă nu va fi


efectuată, prin apartenența la clasa ‘Nu’.

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

Exemplu 2. Se testează capacitatea de clasificare a clasificatorului CBN pe un set de date reprezentând


imagini ale cifrelor zecimale 0..9. Pentru antrenarea clasificatorului, se folosesc 5000 de instanțe (imagini)
(aproximativ câte 500 de imagini pentru fiecare cifră) stocate în format pixel în nuanțe de gri, fiecare imagine
are dimensiunea de 28x28 pixeli. Primele 20 de cifre sunt afișate în Fig. 1 de mai jos. Testarea va fi
efectuată pe alte 5000 de instanțe, nefolosite pentru antrenare.

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 %--------------------------------------------------------------------------------------%

Linia 37, Mdl=fitcnb(xTrain',tTrainClasses,'CategoricalPredictors','all') (Matlab 2018) este cea prin


intermediul căreia se antrenează clasificatorul returnat în obiectul de tip structură ‘Mdl’. Se specifică faptul
că toate atributele (numite și predictori) sunt categoriale și se poate verifica în substructura
Mdl.CategoricalLevels că cele două valori posibile pe care le poate lua fiecare atribut sunt 0 și 2. Câmpul
Mdl.DistributionParameters{j,i} conține, pentru atributul i, probabilitățile ca atributul i să ia valoarea 0 sau 2
atunci când clasa observată este j. Probabilitățile sunt normalizate astfel încât să se însumeze la valoarea
1.
Câmpul Mdl.DistributionNames are valoarea ‘mvmn’ (Multivariate multinomial distribution) pentru
toate cele 784 de atribute, ceea ce înseamnă că algoritmul de antrenare colectează toate valorile unice
pentru fiecare atribut în parte și consideră fiecare valoare unică ca un container, sortează lista acestor
valori și o stochează în Mdl.CategoricalLevels pe poziția corespunzătoare atributului, după care calculează
distribuția de frecvențe (histograma) folosind netezire Laplace.

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.

Performanța clasificatorului este inferioară performanței umane de recunoaștere. Însă numărul de


clase este relativ mare. Performanțele sunt semnificativ mai slabe dacă imaginile sunt păstrate în format
tonuri de gri. Pentru un număr mai mic de clase, performanțele CBN cresc.

Performanța CBN ca și clasificator binar a fost unanim recunoscută și apreciată în clasificarea e-


mailurilor de tip spam.

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,..., xn1 ,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  ...  n1 xn1  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

Fig. 6 Funcția logistică.

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.

Prima soluționare a problemei presupune minimizarea explicită a unei FC de tip crossentropy


folosind funcția standard fminsearch din Matlab și este redată în secvența de cod următoare:

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 %--------------------------------------------------------------------------------------%

Arhitectura rețelei neuronale este ilustrată în Fig. 7.

Fig. 7 Arhitectura rețelei neuronale folosite pentru regresia logistică.

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).

Ambele structuri de clasificatori produc performanțe similare (relativ la acuratețea predicției) pe


seturile de date de antrenare și de validare, chiar dacă în abordarea bazată pe optimizare directă a fost
folosită FC de tip crossentropy iar pentru rețeaua neuronală a fost folosită FC de tip MSE. De asemenea,
ambele structuri folosite la rezolvarea problemei de regresie logistică au acuratețe mai mare pe setul de
validare decât pe setul de antrenare. În fine, fiind vorba despre o aplicație medicală, poate fi pusă problema
minimizării falsurilor negative (întrucât este mai bine ca o instanță să fie clasificată ca fiind pozitivă –
canceroasă – și să fie efectuate teste suplimentare, decât să fie clasificată ca și negativă). Acest aspect
poate fi tratat la antrenare prin ponderarea țintelor, adică prin a da „greutate” mai mare exemplelor din clasa
pozitivă.

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

apartenență la clasa i, cu i variind de la 1 la K. Valoarea z  θT x calculează K combinații liniare ale


atributelor de intrare.

Ț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.

Pentru a determina apartenența la o clasă a unei anumite instanțe x, se calculează


softmax(z  θT x) care produce un vector cu valori care se însumează la 1. Clasa de apartenență predictată
este dată de indicele poziției cu cea mai mare valoare din vectorul softmax(z ) .

Funcția de cost recomandată a fi utilizată în cazul acestei arhitecturi de clasificator multiclasă este
crossentropy.

Exerciții propuse:

1) Să se antreneze și să se testeze acuratețea (prin afișarea curbelor ROC și a matricei confuziilor


pe setul de antrenare și respectiv pe cel de validare) unui clasificator multiclasă de tip rețea
neuronală cu un singur strat, cu funcție de activare de tip softmax, pentru problema de clasificare
a cifrelor din setul de date MNIST.
Se va folosi scheletul de program de mai jos care delimitează secțiunile de:
- încărcare în Workspace și pregătire a setului de date de antrenare (imagini în format pixel în
tonuri de gri),
- creearea unei arhitecturi de rețea neuronală personalizată cu un singur strat, cu funcție de
activare softmax,
- încărcarea și pregătirea setului de date de validare.

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 %--------------------------------------------------------------------------------------%

Indicatori de performață ai clasificatorilor


Clasificatorii binari sunt de departe cei mai des întâlniți în practică. În continuare vor fi detaliate
câteva metrici de performanță a clasificatorilor binari, unele dintre acestea putând fi extinse și la clasificatori
de tip multiclasă.

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

Tabelul I. Matricea confuziilor pentru un clasificator binar

Clasele predictate
Clasele P N
reale P a (RP) b (FN)
N c (FP) d (RN)

Acuratețea (clasificatorului) se definește ca ACU  a  d RP  RN ,



a bc d RP  RN  FP  FN

a RP
Precizia se măsoară ca P REC  
ac RP  FP
a RP
Senzitivitatea (sau rapel) se măsoară ca S ENZ   ,
ab RP  FN
d RN
Specificitatea definită ca SPECIF   ,
cd 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

Câteva observații utile în practică, cu exemple:

 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”).

Este clar deci că acest indicator poate fi generalizat la un clasificator multi-clasă.

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

M. Lichman (2013). UCI Machine Learning Repository


[http://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+%28Diagnostic%29]. Irvine, CA:
University of California, School of Information and Computer Science.

Matlab (2015). Neural Networks Toolbox Documentation, Mathworks Inc., Natick, MA.

17

S-ar putea să vă placă și