Sunteți pe pagina 1din 39

k-Nearest Neighbors (kNN)

Regula celor mai apropiati k vecini

https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm

https://www.analyticsvidhya.com/blog/2017/11/information-retrieval-
using-kdtree/
1-NN, 3-NN, 5-NN, 11-NN
Eroarea de clasificare
• R* < Rknn < R*(2- MR*/(M-1))
• Cazul M=2
Rknn < 2R*
1-NN
5-NN
Cum se pot rezolva cazurile în care
numărul de vecini este egal
In ScikitLearn: atribuirea de ponderi vecinilor:
- weights=‘uniform’ – se considera majoritatea simpla de voturi egale cu 1 a celor k
vecini
- weights=‘distance’ – votul unui vecin este egal cu 1/d(z, x[i])
Influenta metricii sau a scalării unri
dimensiuni
In figura urmatoare (O.Duda, P. Hart, G. Stork – Pattern
Classification), valorile caracteristicii x1 a fost impartita la 3
Problema
Complexitatea kNN Brute force

functie kNN(x[], n, iclasa[], y, k, z) este


*) aloca vecini[k] ce va contine {d, cls}
pentru i=1, n execută
*) dz = dist ( x[i], z, p)
add ( vecini, dz, iclasa[i] ) //retine k vecini cei mai apropiati - O(k)
@
întoarce clasa_majoritara (vecini, k) // O(k)

O(n(p+k)), însă pentru p>>k avem O(np)


Complexitatea kNN Accelerarea determinarii celor k vecini
functie kNN(x[], n, iclasa[], y, k, z) este
mh = new MaxHeap()
pentru i=1,n execută
*) calculeaza dz=dist(z, x[i])l
daca mh.size() < k atunci
mh.add( {dx, C[i]} )
altfel
daca dz < mh.top() atunci
mh.remove()
mh.add( {dx, C[i]} )
@
@
@
întoarce clasa_majoritara (vecini, k)

T(n) = n( p + 2 * log k) + k => O ( n (p + log k) )


Insa de multe ori p>>k si atunci O(np)
Modalitati de accelerare a
recunoasterii cu regula kNN
• Calculul partial al distantei (reducere influenta p)

cu r<p; daca Dr(z, x[i]) este mai mare decat distanta dintre z
si cel mai îndepărtat k vecin atunci nu se mai continuă
calculul distanței
• Extragerea setului condensat (reducerea dimensiunii
setului de învățare - n)
• Structurarea spatiului formelor (reducerea numarului
de cautari prin cele n forme) => O(p log n)
Determinare set condensat
*) Marcaj[i] = Fals pentru i = 1,n
pentru i = 1,n execută
*) determină cei mai apropiati k vecini ai formei x[i]
dacă *) toti vecinii au aceeasi clasă cu x[i] atunci
Marcaj[i]=Adevărat
@
@
*) Set_Condensat = { x[i] dacă Marcaj[i]=Fals, i=1,n }
Structurarea spatiului formelor - KD Tree
exemplu preluat , corectat si prelucrat din Information retrieval using KD Tree
https://www.analyticsvidhya.com/blog/2017/11/information-retrieval-using-kdtree/
Constructia
arborelui KD
KD Tree
Se divide in 2
noduri (semplane)
KD Tree
Se divide in 2
noduri (semplane)
KD Tree. Se divid Node 1 si Node 2
KD Tree. Se divid
Node 1 si Node 2
KD Tree
Se divide Node 6
KD Tree
Se divide Node 6
KD Tree
Se divide
Node 6 in
Node 7
si Node 8
KD Tree
Nodurile
frunza
contin cate
1-2 forme
Utilizarea unui KD tree in
recunoasterea formelor cu regula kNN
Se cauta nodul ce
contine forma
Q=(0.35, 0.6)
Mai sunt alti vecini mai apropiati aflati
in nodurile invecinate ?
Mai sunt alti vecini mai apropiati aflati
in nodurile invecinate ?
Mai sunt alti vecini mai apropiati aflati
in nodurile invecinate ?
Mai sunt alti vecini mai apropiati aflati
in nodurile invecinate ?
Mai sunt alti vecini mai apropiati aflati
in nodurile invecinate ?
Mai sunt alti vecini mai apropiati aflati
in nodurile invecinate ?
Mai sunt alti vecini mai apropiati aflati
in nodurile invecinate ? NU!
Concluzii privind complexitatea kNN
https://scikit-learn.org/stable/modules/neighbors.html

Relativ la n si p
• Pentru valori mici ale lui p (p<20) KD tree este foarte
eficient
• Pentru seturi mici (n<30), log(N) este comparabil cu N,
si brute force este mai eficient
Relativ la k
• Brute force nu este afectat semnificativ de k
• KD tree devine lent pentru valori mari ale lui k (efectiv
se exploreaza aproape tot setul pentru k mare)
• Pentru valori ale lui k apropiate de N Brute force
devine mai eficient.
Alegerea lui k
Dataset Iris - https://archive.ics.uci.edu/ml/datasets/iris
==========k-NN=========
nr forma clasa fisier Cl_ 1 v Cl_ 3 v Cl_ 5 v Cl_ 7 v Cl_ 9 v Cl_ 11 v Cl_ 13 v
Cl_ 15 v
0 Iris-setosa Iris-setosa Iris-setosa Iris-setosa Iris-setosa Iris-setosa Iris-setosa Iris-setosa
Iris-setosa
1 Iris-setosa Iris-setosa Iris-setosa Iris-setosa Iris-setosa Iris-setosa Iris-setosa Iris-setosa
Iris-setosa
2 Iris-setosa Iris-setosa Iris-setosa Iris-setosa Iris-setosa Iris-setosa Iris-setosa Iris-setosa
Iris-setosa
70 Iris-versicolor Iris-virginica * Iris-virginica * Iris-virginica * Iris-virginica * Iris-versicolor
Iris-versicolor Iris-virginica * Iris-virginica *
71 Iris-versicolor Iris-versicolor Iris-versicolor Iris-versicolor Iris-versicolor Iris-versicolor
Iris-versicolor Iris-versicolor Iris-versicolor
72 Iris-versicolor Iris-virginica * Iris-virginica * Iris-virginica * Iris-virginica * Iris-virginica *
Iris-versicolor Iris-versicolor Iris-versicolor
...
Clasificari corecte 144 144 145 145 145 146 145 146
Procent clasificari corecte 96.0% 96.0% 96.7% 96.7% 96.7% 97.3% 96.7% 97.3%
Cl_ 1 v Cl_ 3 v Cl_ 5 v Cl_ 7 v Cl_ 9 v Cl_ 11 v Cl_ 13 v Cl_ 15 v
Reprezentarea dataset IRIS (p=3) in 3 dimensiuni
Clasificarea dupa cel mai apropiat
centroid (centru de greutate)
Clasficare kNN – suprafete de separatie neliniare

Clasificare pe baza distantei minime fata de


centroizi – suprafete liniare
• Întrebări

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