Sunteți pe pagina 1din 20

Clasificarea articolelor

vestimentare folosind
algoritmul k-NN
Cuprins
1. Introducere
2. Clasificatorul k-NN
3. Pașii algoritmului k-NN
4. Valoarea lui k
5. Metode de calcul ale distantei - observatii
6. Caracteristici k-NN
7. Avantaje si dezavantaje k-NN
8. Domenii de aplicabilitate
9. Exemplu practic – clasificarea articolelor vestimentare (Python)
Introducere
Un clasificator este definit ca o funcţie care returnează clasa unei instanţe. Instanţa sau
exemplul este de obicei reprezentat prin vectorul de trăsături.
Clasificatorul k-NN este un clasificator non-parametric poate fi considerat cel mai simplu
clasificator, deorece nu construieşte un model pentru setul de antrenare. Decizia se ia în funcţie
de cei mai apropiaţi K vecini din acesta. Astfel, kNN este un algoritm de învățare automată,
„supravegheată” ce folosește unul sau mai multe seturi de antrenare pe baza caruia realizeaza
clasificarea.
Clasificatorul k-NN
K-NN poate fi categorizat ca şi o metodă de învăţare bazată pe instanţe sau invaţare
leneşă, deoarece funcţia de decizie este aproximată doar local şi decizia asupra instanţei se
amâna efectiv la clasificare.
Clasificatorul k- Nearest Neighbors poate fi văzut ca un algoritm care atribuie la cei mai
apropiați k vecini o pondere egală cu 1/k și la restul o pondere egală cu 0.
Pașii algoritmului k-NN
k-Nearest Neighbor, prescurtat: k-NN
◦ Se folosesc k vecini, cei mai apropiați de inregistrarea ce se vrea a fi clasificata
Metoda are nevoie de:
◦ setul de inregistrari cu clase cunoscute
◦ o metrica (distanta, functie de similaritate) care calculeaza distanta intre doua
inregistrari, pe baza valorilor atributelor
◦ valoarea k, numarul de vecini cei mai apropiati care sunt considerati
Pentru clasificarea unei inregistrari:
◦ se calculeaza distanta fata de alte inregistrari din setul de antrenare
◦ se identifica cei mai apropiati k vecini
◦ se folosesc etichetele de clasa ale acestor k vecini pentru a estima clasa asociata
inregistrarii de test (de exemplu prin considerarea votului majoritar)
Valoarea lui k
Valoarea lui k este importanta: daca e prea mic, atunci clasificatorul poate fi suspectat
de overfitting, pentru ca devine prea senzitiv la zgomotul din datele de intrare (zgomot
⇒ date eronate) daca e prea mare, atunci s-ar putea ca prea multi dintre cei k vecini
considerati sa fie departati de punctul curent si deci irelevanti pentru clasificarea
curenta.
În general, se alege ca număr impar dacă numărul de clase este par. De asemenea,
testand algoritmul pe diferite valori ale lui k și, in functie de performanta, se poate
retine cea mai potrivita optiune pentru setul de date folosit.
Metode de calcul ale distantei
Există mai multe metode de calcul a similarității între doi vectori. Fiecare metodă se alege în
funcție de domeniu aplicabilității metodei respective( vezi exemplul practic ). Astfel, calculul
similarității se poate realiza prin folosind:
1. Distanta Euclidiană:

1. Cosinusul unghiului dintre doi vectori (pentru ca această metrică să întoarcă rezultate
corecte vectori trebuie normalizați)
Metode de calcul ale distantei
3. Distanta Manhattan

4. Distanta Minkowski
Distanta - observatii
Problema cu distanta Euclidiana: fiecare atribut are exact aceeasi pondere in calculul sumei
de sub radical. Chiar daca se face scalarea marimilor, nu inseamna ca fiecare dimensiune are
aceeasi relevanta.
Pentru a reduce senzitivitatea algoritmului k-NN fata de alegerea lui k se poate folosi o
ponderare a vecinilor.
Astfel, toti cei k vecini participa la decizia legata de clasa actuala, dar cu ponderi diferite:
◦ vecinii mai apropiati au pondere mai mare
◦ vecinii mai departati au pondere mai mica
Ponderea poate fi descrescatoare cu distanta fata de punctul ce se vrea a fi clasificat.
Caracteristici
• Un tip particular de “instance-based learning”;
• Nu produce efectiv un model; timpul de invatare este 0;
• Clasificarea poate fi lenta, deoarece se face uz de tot corpusul de date din setul de instruire;
• Clasificarea se face pe baza informatiei locale, pe cand arborii de decizie si clasificatorii bazati pe
reguli gasesc un model global;
• k-NN poate produce suprafete de decizie arbitrar de complexe; suprafetele pot avea
variabilitate mare, puternic influentate de setul de instruire;
• Daca nu se foloseste preprocesare (scalarea diferitelor atribute ar trebui luata in considerare)
sau o masura de similaritate adecvata, valorile prezise pot fi gresite.
Avantaje k-NN
• Simplu de implementat;
• Flexibil din punct de vedere al distanței alese;
• In general trateaza cazuri ce implica mai multe tipuri de clase;
• Este optim in practica atunci cand dispune de un esantion de antrenare cu suficiente date.
Dezavantaje k-NN
• Necesitatea determinării valorii parametrului k;
• Dificultatea intampinata la alegerea metodei de calcul a distantei. Aceasta trebuie sa fie potrivita
setului de date ales;
• Compleitatea (costul de calcul) este destul de mare, deoarece trebuie să calculăm distanța fiecărei
instanțe de interogare la toate eșantioanele de instruire;
• Stocarea datelor (seturile de antrenare si cel de test).
Domenii de aplicabilitate
• Finanțe - institutele financiare pot prezice
capacitatea unui client de a-si rambursa
datoria (credit rating)
• Asistența medicală - expresia genelor
• Științe politice - clasificarea potențialilor
alegători în două clase: va vota sau nu va
vota
• Detectarea scrisului de mână
• Recunoașterea imaginilor
• Recunoaștere video
• Recunoasterea formelor
Exemplu practic – clasificarea articolelor
vestimentare
Biblioteca Fashion MNIST
Fashion MNIST este un set de date de imagini căruia i se asociaza una dintre cele 10
etichete unice, precum: topuri, pantaloni, pulovere, rochie, haine, sandale, camasi, adidași,
genti și botine.
Setul de date este împărțit în două seturi: de instruire și de teste; există 60000 de imagini în
setul de instruire și 10000 de imagini în setul de testare. Fiecare imagine este o matrice 28 x 28
cu valori de la 0 la 255.
Clasificare folosind norma L0
Distanța L0 dintre doi vectori x și y este definită ca numărul de elemente diferite de zero în
|x-y|.
Aici alegem să aplicăm norma L0 pentru a determina distanta dintre imaginile de instruire
și o imagine de test dată.
În exemplul practic, acest lucru este realizat într-un mod indirect. Am ales aceasta
modalitate de calcul pentru a facilita procesul de calcul al distantei. Pentru fiecare imagine
(train sau test), generăm o imagine modificată, alocând 1 unui pixel care nu este zero și 0 unui
pixel care este zero în imaginea originală. Imaginea modificată este o imagine cu doar 1 și 0.
Pentru a determina distanta dintre o imagine de test și una de test, calculăm metrica distanței
euclidiene între imaginile lor modificate.
Generarea unei imagini modificate și stocarea acesteia nu este o modalitate eficientă, însa
după rularea codului, se observa că algoritmul atinge o acuratețe de clasificare de 84%.
Complexitate

Complexitatea algoritmului kNN pentru acest exemplu este destul de mare: pentru
fiecare imagine din setul de test (10000 imagini), calculăm 60000 de distante (una pentru
fiecare imagine de instruire). După popularea unui vector de 60000 de valori, scanăm acest
tablou pentru a identifica cele mai mici k valori.
Implementarea Tensorflow

Algoritmul este implementat în mod specific pentru Tensorflow. Pornim prin definirea
unui graf detaliat al algoritmului și apoi, îl rulez în cadrul unei instanțe Tensorflow a unei
sesiuni.
Am încercat să rulez codul cu k = 1 și am obținut o precizie de clasificare de 83,75%, care
este similară cu cea pentru k = 11 ( am obținut o precizie de clasificare de 84%).
Bibliografie

1. https://pdfs.semanticscholar.org/2701/1c09fe3576c10cf38a25f6936c566c02c0c8.pdf
2. https://medium.com/datadriveninvestor/k-nearest-neighbor-classification-with-
python-numpy-tensorflow-on-fashion-mnist-dataset-d8361187c09c
3. https://algorithmia.com/blog/classify-clothing-and-fashion-in-images
4. https://towardsdatascience.com/k-nearest-neighbor-python-2fccc47d2a55
5. https://www.analyticsvidhya.com/blog/2018/03/introduction-k-neighbours-algorithm-
clustering/

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