Numérique et sciences informatiques (spécialité) · Première
Algorithme des k plus proches voisins : cours de NSI Première
Publié le 6 novembre 2026 · Mis à jour le 6 novembre 2026 · Signaler une erreur
L'essentiel
- L'algorithme des k plus proches voisins prédit la classe d'une donnée nouvelle en regardant les k données connues les plus proches d'elle. 3
- C'est un algorithme d'apprentissage supervisé : il faut des exemples déjà labellisés, c'est-à-dire dont la classe est connue. 2
- Il n'y a pas de véritable phase d'apprentissage : on conserve le jeu de données, puis on calcule les distances au moment de la prédiction. 2
- En classification, on retient la classe majoritaire parmi les k voisins ; en régression, on calcule la moyenne de leurs valeurs. 3
- Le choix de k change le résultat : avec k = 1 seul le plus proche voisin décide, un k trop grand mélange des voisins lointains. 3
À quoi sert cet algorithme ?
Imagine que tu aies mesuré la longueur et la largeur des pétales de plusieurs fleurs, et que tu connaisses l'espèce de chacune. Un jour, tu trouves une fleur nouvelle : tu mesures ses pétales, mais tu ne connais pas son espèce. Comment deviner ? Une idée naturelle consiste à chercher, parmi les fleurs déjà connues, celles qui ressemblent le plus à la nouvelle, puis à copier leur espèce. C'est exactement ce que fait l'algorithme des k plus proches voisins, que l'on abrège souvent en k-NN (de l'anglais k-nearest neighbors). 3
Cet algorithme appartient à la famille des algorithmes d'apprentissage automatique (en anglais machine learning). 2 Au programme de Première, il figure dans la partie « Algorithmique » : il permet à un programme de prendre une décision à partir d'exemples plutôt qu'à partir de règles écrites à la main. 1
Dans ce cours, tu vas voir :
- ce que veut dire « apprentissage supervisé » et pourquoi il faut des données labellisées ;
- comment mesurer la proximité entre deux données grâce à une distance ;
- le déroulement précis de l'algorithme ;
- un exemple entièrement calculé à la main ;
- l'influence du paramètre k ;
- une écriture en Python et ses limites.
Apprentissage supervisé et données labellisées
Pour comprendre l'algorithme, il faut d'abord comprendre le vocabulaire de l'apprentissage automatique.
Les k plus proches voisins relèvent de l'apprentissage supervisé : on doit posséder des exemples labellisés. 2 Une donnée labellisée est une donnée dont on connaît déjà la réponse attendue, appelée label ou classe. Concrètement, on dispose d'un jeu d'apprentissage composé de couples « entrée-sortie ». 3
Prenons un exemple concret :
| Entrée (ce qu'on mesure) | Sortie (la classe) |
|---|---|
| longueur et largeur des pétales d'une fleur | espèce de la fleur |
| coordonnées d'un point dans le plan | couleur du point (rouge ou bleu) |
| paramètres chiffrés d'un objet | catégorie de l'objet |
Le travail de l'algorithme consiste alors à prédire la sortie pour une entrée dont on ne connaît pas la sortie.
Une démonstration classique de l'algorithme utilise trois espèces d'iris (Iris setosa, Iris virginica et Iris versicolor). Quand on représente les mesures de ces fleurs sur un graphique, les trois classes apparaissent relativement bien séparées. 2 C'est une bonne situation pour les k plus proches voisins : si les classes forment des groupes assez distincts, les voisins d'une nouvelle fleur ont de grandes chances d'appartenir à la même classe qu'elle.
Mesurer la proximité : la distance
Pour parler de « plus proches voisins », il faut savoir mesurer la proximité entre deux données. La méthode s'appuie donc sur une distance à définir selon le problème. 3 Comme l'algorithme est basé sur la distance, une normalisation des données peut améliorer sa précision. 3
Le choix usuel pour des variables continues, c'est-à-dire des mesures qui peuvent prendre n'importe quelle valeur dans un intervalle, est la distance euclidienne. 3 C'est la distance « à vol d'oiseau » que tu connais depuis le collège.
Quand une donnée est décrite par plus de deux nombres, on ajoute simplement un terme de plus sous la racine par mesure supplémentaire. Pour deux données à trois mesures, la distance vaut . Il est même possible de représenter un objet décrit par paramètres chiffrés comme un point d'un espace à dimensions. 4
La distance euclidienne n'est pas la seule possible. Pour des variables discrètes, comme en classification de texte, on peut utiliser une autre distance, par exemple la distance de Hamming. 3 Au programme de Première, tu travailleras presque toujours avec la distance euclidienne.
Le principe de l'algorithme
On dispose d'un jeu de données de éléments, chacun avec sa classe, et d'une nouvelle donnée à classer. On se donne aussi un entier inférieur ou égal à . 2
Il n'y a pas d'étape d'apprentissage au sens strict : on se contente de conserver le jeu de données. 2 Tout le travail a lieu au moment où l'on veut classer une nouvelle donnée.
- Choisir kFixer le nombre de voisins et la distance à utiliser.
- CalculerDistance entre la donnée à classer et chaque exemple.
- RetenirGarder les k exemples les plus proches.
- CompterDénombrer les classes parmi ces k voisins.
- DéciderAffecter la classe majoritaire à la donnée.
Pour trouver les plus proches voisins, une méthode directe consiste à parcourir tous les points du jeu de données. Pour chaque point, on regarde s'il est plus proche que l'un des voisins déjà retenus ; si oui, on l'insère dans la liste des voisins et on supprime le plus éloigné pour garder exactement points. 4 Tu reconnais là un parcours séquentiel, comme tu en as déjà écrit pour chercher un minimum dans un tableau.
Un exemple entièrement calculé
Plaçons-nous dans le plan. Notre jeu de données contient sept points, répartis en deux classes, A et B :
- classe A : , , ;
- classe B : , , , .
On veut classer le point nouveau .
| Rang | Point | Classe | Distance à P |
|---|---|---|---|
| 1 | B1 (3 ; 3) | B | 1 |
| 2 | A2 (2 ; 1) | A | 1,41 |
| 3 | A1 (1 ; 2) | A | 2 |
| 4 | A3 (1 ; 3) | A | 2,24 |
| 5 | B2 (5 ; 4) | B | 2,83 |
| 6 | B3 (6 ; 5) | B | 4,24 |
| 7 | B4 (5 ; 6) | B | 4,47 |
Cet exemple montre une chose capitale : le résultat dépend de k. Pour le même point et les mêmes données, on obtient B avec , A avec et , puis B de nouveau avec . Le dernier cas est extrême : avec , la prédiction ne dépend plus du tout de la position de , on obtient toujours la classe la plus fréquente du jeu de données. Cela n'a plus aucun intérêt.
Choisir k et affiner la décision
L'algorithme a besoin de connaître le nombre de voisins à considérer. 3 Il n'existe pas de valeur universelle. Une méthode classique pour la choisir est la validation croisée. 3 Elle consiste, en gros, à essayer plusieurs valeurs de sur des données dont on connaît déjà les classes et à garder celle qui se trompe le moins. Elle dépasse le programme de Première, mais l'idée est utile pour comprendre qu'on teste k plutôt que de le deviner.
Que faire en cas d'égalité ? Le principe de base ne le précise pas : c'est un choix à faire dans le programme. On peut par exemple choisir la classe du voisin le plus proche parmi les classes à égalité, ou augmenter ou diminuer d'une unité. L'essentiel est de décider une règle claire, de la documenter et de l'appliquer toujours de la même façon.
Pondérer les voisins. Dans la version de base, les voisins comptent à égalité. Il existe une technique efficace qui donne plus de poids aux voisins proches qu'aux voisins éloignés. Un schéma courant donne à chaque voisin le poids , où est sa distance à la donnée à classer. 3 Dans notre exemple, (à distance 1) compterait alors deux fois plus que (à distance 2).
Programmer l'algorithme en Python
On représente le jeu de données par une liste de couples (point, classe), où point est un tuple de coordonnées. Pour la donnée à classer, on utilise aussi un tuple.
from math import sqrt
def distance(p, q):
return sqrt((p[0] - q[0]) ** 2 + (p[1] - q[1]) ** 2)
def k_plus_proches(donnees, x, k):
couples = [(distance(p, x), classe) for (p, classe) in donnees]
couples.sort()
return couples[:k]
def classe_majoritaire(voisins):
effectifs = {}
for (d, classe) in voisins:
effectifs[classe] = effectifs.get(classe, 0) + 1
meilleure = None
for classe in effectifs:
if meilleure is None or effectifs[classe] > effectifs[meilleure]:
meilleure = classe
return meilleure
def knn(donnees, x, k):
return classe_majoritaire(k_plus_proches(donnees, x, k))
Avec notre exemple, knn(donnees, (3, 2), 3) renvoie 'A', comme dans le calcul à la main.
Analysons ce code :
distanceapplique la formule de la distance euclidienne ;k_plus_prochesassocie à chaque point du jeu de données sa distance àx, trie les couples par distance croissante, puis garde leskpremiers ;classe_majoritairecompte les classes avec un dictionnaire et renvoie celle dont l'effectif est le plus grand. En cas d'égalité, elle garde la première rencontrée, ce qui constitue une règle de départage parmi d'autres ;knnassemble les deux fonctions précédentes.
Le tri complet n'est pas indispensable : le parcours séquentiel avec une liste de voisins, évoqué plus haut, suffit. 4 Le tri a l'avantage d'être court à écrire, ce qui est pratique pour s'entraîner.
Coût et limites de l'algorithme
Un avantage : pas d'entraînement. Puisqu'il suffit de conserver le jeu de données, on peut ajouter de nouveaux exemples à tout moment sans « réapprendre » quoi que ce soit. 2
Un coût au moment de la prédiction. Chaque nouvelle prédiction oblige à comparer la donnée à classer avec les éléments du jeu de données. La recherche séquentielle, qui parcourt tous les points, a un temps de calcul linéaire en la taille de l'ensemble, noté , tant que reste très petit devant . 4 Si ton jeu de données double de taille, la recherche prend environ deux fois plus de temps. Tu as déjà rencontré cette notion de coût d'un algorithme en étudiant les tris.
Des limites à connaître.
- Le résultat dépend de la distance et de la valeur de , deux choix qui ne sont pas imposés par les données. 3
- Sans normalisation, une mesure à grande échelle peut dominer les autres. 3
- La qualité de la prédiction dépend de la qualité des données labellisées : si les classes se mélangent beaucoup dans l'espace des mesures, les voisins ne suffisent pas à trancher.
- On peut améliorer la précision en apprenant la distance avec des algorithmes spécialisés, ce qui dépasse le niveau de la classe de Première. 3
Les erreurs fréquentes
Exercices corrigés
Exercice 1 Calculer une distance euclidienne
Dans un repère orthonormé, on considère le point du jeu de données et le point à classer. Calcule la distance .
Indice 1
Écris les différences des abscisses et des ordonnées, puis élève-les au carré.
Indice 2
Additionne les deux carrés avant de prendre la racine.
Voir la correction pas à pas
On applique la formule .
Différence des abscisses : , dont le carré vaut .
Différence des ordonnées : , dont le carré vaut .
Somme : .
Racine : .
La distance vaut . C'est un triplet pythagoricien (3, 4, 5), ce qui permet de vérifier le résultat de tête.
Exercice 2 Classer un point avec k = 3
Le jeu de données contient cinq points :
| Point | Coordonnées | Classe |
|---|---|---|
| A | ||
| A | ||
| B | ||
| B | ||
| B |
On veut classer le point avec .
- Calcule les distances de à chaque point.
- Détermine les trois plus proches voisins et la classe de .
- Donne la distance de à son troisième plus proche voisin.
Indice 1
Calcule d'abord les cinq distances, sous forme exacte avec une racine si besoin.
Indice 2
Range-les par ordre croissant avant de choisir les trois premières.
Voir la correction pas à pas
Distance à : .
Distance à : .
Distance à : .
Distance à : .
Distance à : .
Classement : , , , , . Les trois plus proches sont (A), (A) et (B).
Vote : deux A contre un B, donc est classé en A.
Le troisième voisin est , à la distance .
Le point est de classe A, avec un vote de 2 contre 1. Le troisième voisin est à la distance . Avec , le résultat aurait été A aussi ; avec , les trois points de B l'emporteraient (trois B contre deux A).
Exercice 3 Prédire une valeur par régression
Une agence connaît le prix de cinq logements selon leur surface :
| Surface (m²) | Prix (k€) |
|---|---|
| 30 | 90 |
| 44 | 130 |
| 48 | 140 |
| 55 | 150 |
| 70 | 200 |
On veut estimer le prix d'un logement de m² avec l'algorithme des k plus proches voisins en régression, avec . Ici, la distance entre deux surfaces et est .
- Calcule la distance de à chaque surface.
- Détermine les trois plus proches voisins.
- Donne le prix estimé en k€.
Indice 1
La distance entre deux nombres est la valeur absolue de leur différence.
Indice 2
En régression, on ne vote pas : on fait une moyenne.
Voir la correction pas à pas
Distances à : ; ; ; ; .
Classement croissant : 48 (distance 2), 55 (distance 5), 44 (distance 6), puis 30 et 70 (distance 20).
Les trois plus proches voisins sont donc les logements de 48, 55 et 44 m², de prix 140, 150 et 130 k€.
En régression, le résultat est la moyenne de leurs valeurs : .
Le prix estimé pour 50 m² est de k€. Le logement de 30 m² et celui de 70 m², trop éloignés, n'ont pas influencé le résultat : c'est tout l'intérêt de ne retenir que les voisins proches.
Quiz
8 questions · correction immédiate · ton score reste sur ton appareil.
-
C'est un algorithme d'apprentissage supervisé : il faut disposer de données dont la classe est connue. 2 Il ne s'agit pas d'un algorithme non supervisé, puisque les classes servent justement au vote, ni d'un tri ni d'une recherche dichotomique, qui répondent à d'autres problèmes.
-
Si , l'objet est affecté à la classe de son plus proche voisin. 3 La classe la plus fréquente du jeu entier correspondrait au cas extrême , pas à . Une moyenne de classes n'a pas de sens, et la position dans le tableau n'intervient pas.
-
On retient la classe majoritaire parmi les voisins. 3 Ici B apparaît 3 fois contre 2. Le nombre de points d'une classe ne renseigne pas sur leur distance, et il n'y a pas d'égalité puisque 3 est différent de 2.
-
On calcule . L'erreur tentante est d'oublier la racine et de répondre 25, ou d'additionner les différences () : ces deux valeurs ne sont pas la distance.
-
En régression, le résultat est la moyenne des valeurs des plus proches voisins. 3 La classe majoritaire est le résultat de la classification. La somme dépendrait de au lieu de rester dans l'ordre de grandeur des valeurs.
-
C'est faux : l'algorithme n'a pas d'entraînement à proprement parler, il suffit de conserver les données. 2 Le coût se situe au moment de la prédiction, où il faut comparer la donnée à classer avec les données mémorisées.
-
La recherche séquentielle parcourt tous les points et a un temps de calcul linéaire, noté , tant que reste très petit devant . 4 Le temps ne peut pas être constant puisqu'on doit examiner chaque point. La dichotomie suppose un tableau trié, ce qui n'est pas le cas ici.
Les questions qu'on se pose
À quoi sert l'algorithme des k plus proches voisins ?
Il sert à prédire une classe ou une valeur pour une donnée nouvelle, à partir d'exemples dont on connaît le résultat. Il fait partie des algorithmes d'apprentissage automatique. 2 La recherche de voisinage est utilisée dans de nombreux domaines, comme la reconnaissance de formes ou la prédiction de séries temporelles. 4 Au programme de Première, il illustre comment un programme peut décider à partir de données plutôt que de règles écrites à la main.
Comment choisir la valeur de k ?
Il n'y a pas de valeur imposée. L'algorithme a besoin que l'on fixe , et une méthode classique pour le choisir est la validation croisée, qui consiste à tester plusieurs valeurs. 3 En pratique, on prend un petit entier. 3 Pour deux classes, un impair évite les égalités de vote. Un égal à 1 rend la décision sensible à un point isolé, un trop grand mélange des voisins lointains.
Que se passe-t-il quand plusieurs classes arrivent à égalité ?
Le principe ne tranche pas : c'est une règle à choisir et à écrire dans ton programme. Tu peux par exemple prendre la classe du voisin le plus proche parmi les classes à égalité, ou modifier . L'important est d'appliquer la même règle à chaque prédiction. Avec deux classes et un impair, le problème ne se pose pas.
Pourquoi faut-il parfois normaliser les données ?
Quelle est la différence entre classification et régression avec cet algorithme ?
En classification, le résultat est une classe, obtenue par vote majoritaire des voisins. En régression, le résultat est une valeur, obtenue en calculant la moyenne des valeurs des voisins. 3 La méthode de recherche des voisins est la même dans les deux cas : seule la façon de combiner leurs réponses change.
Sources
Programme visé : Programme de numérique et sciences informatiques de première générale — Algorithmique · Ministère de l'Éducation nationale
- Programme de numérique et sciences informatiques de première générale — Algorithmique, Ministère de l'Éducation nationale. Consulté le 6 novembre 2026.
- Algorithme des k plus proches voisins — Ressource Éduscol, Éduscol. Consulté le 6 novembre 2026.
- Méthode des k plus proches voisins, Wikipédia. Consulté le 6 novembre 2026.
- Recherche des plus proches voisins, Wikipédia. Consulté le 6 novembre 2026.
Les numéros dans le texte renvoient à ces sources. Une source qui ne dit pas ce qu'on lui fait dire ? Signale-le.