Intelligence Artificielle - Algorithme KNN¶

Algorithme KNN¶

K Nearest Neighbors (k plus proches voisins)¶

  • Algorithme de classification par apprentissage supervisé.
  • Les objets sont représéntés par des vecteurs de $\mathbb{R}^d$,
  • On considère la distance euclidienne : $dist(\vec{x}, \vec{y}) = \sqrt{\sum_{i=1}^d (x_i-y_i)^2}$
  • On considère $n$ classes : $C_1, C_2, ... C_n$
  • On dispose de $N$ objets déjà classés (apprentissage supervisé)

Algorithme KNN :¶

Pour attribuer une classe un nouvel objet représenté par un vecteur $\vec{v}$

  • on cherche les k objets annotés les plus proches de $\vec{v}$. ($k\in \mathbb{N}^*$)

  • on donne à $\vec{v}$ la classe majoritaire de ces k objets (tirage au sort en cas d'égalité)

Exemple avec $d=2$¶

Les objets sont ainsi représentables dans le plan. La distance est la distance usuelle.

Il y a 3 classes représentées par

image.png

On dispose de 13 objets déjà classés (données d'entraînement)

On souhaite classer un nouvel objet représenté par

image-2.png

image-2.png

image.png

Ca dépend de la valeur de k ...¶

  • k=1 : on considère le plus proche voisin
  • k=2 : on considère les deux plus proches voisins (égalité fréquente ...)
  • k=3 : on considère les trois plus proche voisin (égalité possible ...)
  • ...

image.png

image.png

image.png

image.png

image.png

NB : les 13 ppv sont les 13 objets annotés¶

A retenir¶

  • La classe obtenue peut dépendre de k ...

  • cas dégénéré : k = N : on obtiendra toujours la classe majoritaire

  • k > N : impossible d'appliquer l'algorithme

L'algorithme KNN fonctionne bien à condition que ...¶

  • les données d'entraînement doivent bien couvrir l'espace sur lequel l'algo sera utilisé

NB : problème en grande dimension, il faudra davantage de données d'entrainement. Exponentiel en fonction de $d$ : on parle du "fléau de la dimension".

  • la répartition des classes dans l'espace doit être "nette"

que dire de cet exemple ?¶

image.png

on cherche à classer un objet qui est trop loin des objets annotés¶

## que dire de cet exemple ?¶

image-2.png

les classes des objets annotés ne semblent pas liées à leur postion dans l'espace¶

(caractéristiques utilisées non pertinentes ?)

Comment choisir la valeur de k ?¶

en pratique :

  • plutôt impair (pour éviter les cas d'égalité)

  • k = 1 présente un intérêt limité

  • k pas trop grand (souvent $k < \sqrt{N}$)

Exemple d'application¶

Reconnaissance de chiffres manuscrits (MNIST database : 60000 images d'entrainement, 10000 images de test)

image.png

Objets à classer : image 28x28 pixels Noir/Blanc (${0,1})

10 Classes : 0 1 2 3 4 5 6 7 8 9

Approche naïve : chaque pixel est une caractéristique : on travaille dans $\{0,1\}^{784}$

Approches plus subtiles : trouver des caractéristiques plus pertinentes et moins nombreuses -> traitement d'image, visualisation des données

Variante : Fashion MNIST¶

(base de donnée d'images issues du site Zalando)

image.png