Prepa Help
Prepa Help › Cours › Informatique, 2e année

Apprentissage automatique : k plus proches voisins et k-moyennes, cours et exercices corrigés de prépa

Apprentissage supervisé et non supervisé, données d'apprentissage et de test, distance, algorithme des k plus proches voisins et vote majoritaire, matrice de confusion, choix de k, algorithme des k-moyennes, centres, partition, inertie, initialisation et arrêt, complexités.

Les nombres sont ceux du chapitre complet ; chaque filière voit la partie qui correspond à son programme.

L'apprentissage supervisé prédit la classe d'une donnée nouvelle à partir de données déjà étiquetées ; l'apprentissage non supervisé regroupe des données sans étiquette. Le chapitre traite les deux algorithmes du programme d'informatique de deuxième année, en MP, PSI et TSI au Maroc et en MP, PC, PSI, PT, TSI et TPC en France. Il écrit en Python l'algorithme des k plus proches voisins avec distance euclidienne : calcul des distances, sélection des k plus petites sans trier, vote par une liste de compteurs, en O(nd+kn+c)O(nd + kn + c) par prédiction. Il montre pourquoi normaliser les attributs, construit et lit la matrice de confusion et choisit k sur des données de test. Il écrit ensuite l'algorithme des k-moyennes : affectation au centre le plus proche, recalcul des centres, arrêt, groupe vide, inertie, et observe la convergence vers un minimum local. Les problèmes reprennent des sujets d'informatique du CNC 2024, 2025 et 2026 (pluie du lendemain, code postal, fleurs d'iris, segmentation d'une image) et du CCINP 2026 (spectres de galaxies et d'étoiles).

Ce que tu sauras faire

Au coin des pesées de la coopérative, deux trieurs ne classent pas les dattes de la même façon. On voudrait qu'une machine propose la variété d'une datte d'après ses mesures, en la comparant aux dattes déjà classées par le connaisseur. Puis, pour les lots du jour, qui n'ont pas d'étiquette, on voudrait former d'elle-même des calibres. Ce chapitre présente les deux algorithmes du programme qui répondent à ces deux questions : les k plus proches voisins et les k-moyennes.

L'essentiel : k plus proches voisins Extrait gratuit

Un extrait de la fiche « L'essentiel » du chapitre. Les démonstrations sont dans le cours détaillé.

À retenir Les trois étapes
  1. Distances de l'objet à chaque donnée d'apprentissage : O(nd)O(nd).
  2. Les kk plus petites, sans trier : kk recherches du minimum parmi les non pris, O(kn)O(kn) ; à égalité, le plus petit indice.
  3. Vote par une liste de cc compteurs : O(k+c)O(k + c) ; à égalité, la classe de plus petit numéro.

Pas de phase d'apprentissage : tout se calcule à chaque prédiction. À deux classes, kk impair.

def plus_proches(D, k):
    n = len(D)
    pris = [False] * n
    vois = []
    for t in range(k):
        m = -1
        for i in range(n):
            if not pris[i] and (m == -1 or D[i] < D[m]):
                m = i
        pris[m] = True
        vois.append(m)
    return vois

def vote(Y, vois, c):
    cpt = [0] * c
    for i in vois:
        cpt[Y[i]] = cpt[Y[i]] + 1
    gagnante = 0
    for j in range(1, c):
        if cpt[j] > cpt[gagnante]:
            gagnante = j
    return gagnante

def knn(X, Y, x, k, c):
    D = distances(X, x)
    vois = plus_proches(D, k)
    return vote(Y, vois, c)

Une méthode du chapitre Extrait gratuit

Un exercice corrigé Extrait gratuit

Dans le chapitre complet

Le cours détaillé, toute la fiche « L'essentiel », 17 méthodes, 18 pièges corrigés, la carte mentale, 36 exercices corrigés, 6 problèmes de concours, les fiches à mémoriser et l'assistant qui répond à tes questions. Ce chapitre est offert : il s’ouvre en entier avec un compte d’essai gratuit.

Ouvrir l'essai gratuitVoir les offres

Plan du cours

Les méthodes du chapitre

Chaque méthode est une fiche : quand l'utiliser, le rappel de cours, les étapes, la rédaction attendue sur la copie, un exemple traité, les erreurs à éviter.

  1. Reconnaître le type de problème
  2. Représenter les données et respecter la représentation imposée
  3. Écrire une distance et comparer sans racine
  4. Normaliser les attributs
  5. Sélectionner les k plus proches sans trier
  6. Faire voter les voisins et départager
  7. Écrire knn et le dérouler à la main
  8. Construire et lire une matrice de confusion
  9. Choisir k sur les données de test
  10. Dérouler les k-moyennes à la main
  11. Affecter et recalculer les centres
  12. Écrire les k-moyennes complètes
  13. Calculer une inertie, comparer des partitions et répéter les départs
  14. Montrer un minimum local et ne pas choisir k par l'inertie
  15. Lire et critiquer un code donné
  16. Prédire une valeur numérique par les k plus proches voisins
  17. Choisir le nombre de groupes par la méthode du coude

Les exercices corrigés

Chaque exercice a ses indications, sa correction rédigée et ce qu'il faut en retenir.

Application directe (14)

Entraînement (16)

Approfondissement (6)

Les problèmes de concours

Des extraits de sujets réels, corrigés en entier, avec la durée conseillée et les méthodes mobilisées.

Questions fréquentes

Comment fonctionne l'algorithme des k plus proches voisins ?

L'algorithme des k plus proches voisins classe un objet nouveau, décrit par une liste d'attributs, à partir de données d'apprentissage dont on connaît la classe. Il se fait en trois étapes. On calcule d'abord la distance euclidienne de l'objet à chaque donnée d'apprentissage, en O(nd)O(nd) pour nn données de dd attributs. On retient ensuite les kk données les plus proches, sans trier toute la liste : on cherche kk fois la plus petite distance non encore prise, en O(kn)O(kn), et à distance égale on garde le plus petit indice. Enfin, les kk voisins votent : une liste de cc compteurs, un par classe, donne la classe la plus représentée, et à égalité la classe de plus petit numéro. Une prédiction coûte donc O(nd+kn+c)O(nd + kn + c). Il n'y a pas de phase d'apprentissage : on garde les données telles quelles et tout le calcul se fait au moment de chaque prédiction.

Comment choisir la valeur de k ?

On choisit kk en mesurant la qualité des prédictions sur des données de test, mises de côté, que l'algorithme ne consulte jamais pour voter. On essaie plusieurs valeurs de kk et l'on compte les bonnes prédictions. Un kk trop petit rend la décision sensible à une donnée atypique : dans l'exemple des dattes du cours, k=1k = 1 ne classe bien que 8 dattes de test sur 9. Un kk trop grand fait voter des données éloignées : avec k=15k = 15, toutes les données votent et seules 3 dattes sur 9 sont bien classées. Entre les deux, de k=3k = 3 à k=9k = 9, les 9 dattes sont bien classées ; on prend une valeur au milieu de ce plateau. Avec deux classes, on préfère un kk impair, qui évite les égalités de votes. On ne mesure jamais la qualité sur les données d'apprentissage : avec k=1k = 1, chaque donnée est sa propre voisine, et l'on obtient 100 % quand les données sont deux à deux distinctes, sans rien apprendre.

Pourquoi normaliser les attributs avant de calculer des distances ?

La distance euclidienne additionne les carrés des écarts pris sur chaque attribut. Si un attribut prend de grandes valeurs, ses écarts écrasent ceux des autres, et c'est lui qui décide seul du plus proche voisin. Il suffit de changer d'unité pour le voir : dans l'exemple du cours, la datte de mesures 18 g et 42 mm a pour plus proche voisine la datte 7 quand la longueur est en millimètres, et la datte 9 quand elle est en centimètres ; avec trois voisins, la décision passe de B à A. Pour que chaque attribut compte autant, on le ramène entre 0 et 1 par v↦(v−min⁡)/(max⁡−min⁡)v \mapsto (v - \min) / (\max - \min), où le minimum et le maximum sont calculés sur les données d'apprentissage, en une seule boucle. On normalise ensuite les données de test et toute donnée nouvelle avec ces mêmes bornes ; une valeur normalisée peut alors sortir de l'intervalle de 0 à 1, ce qui n'a rien d'anormal.

Qu'est-ce qu'une matrice de confusion et comment la lire ?

Pour un problème à cc classes, la matrice de confusion d'un jeu de test est une matrice c×cc \times c dont la case (i,j)(i, j) compte les données de test de classe réelle ii que l'algorithme a prédites jj : les lignes sont les classes réelles, les colonnes les classes prédites. Un énoncé peut prendre la convention inverse, qu'il faut toujours lire avant d'interpréter. Les bonnes prédictions sont sur la diagonale, et l'exactitude, ou taux de réussite, est la somme de la diagonale divisée par le nombre de données de test. Une case hors de la diagonale nomme une confusion précise. Pour étudier une classe contre les autres, on forme un tableau de quatre cases : vrais positifs, faux négatifs, faux positifs et vrais négatifs. Les mesures comme la précision et le rappel se calculent alors avec la formule que donne l'énoncé. En Python, on crée la matrice par compréhension, une ligne neuve par classe, puis on ajoute 1 dans la case de chaque donnée de test.

Comment fonctionne l'algorithme des k-moyennes, et qu'est-ce qu'un minimum local ?

Les k-moyennes regroupent nn points sans étiquette en kk groupes. On part de kk centres, par exemple kk points distincts du nuage tirés au hasard sans remise. Chaque tour affecte chaque point au centre le plus proche, puis remplace chaque centre par la moyenne des points de son groupe ; on s'arrête quand plus aucune affectation ne change, ou après un nombre maximal de tours. Un tour coûte O(nkd)O(nkd). L'inertie, somme des carrés des distances de chaque point au centre de son groupe, ne croît jamais d'un tour au suivant ; avec une règle d'égalité fixée, l'algorithme s'arrête. Mais il s'arrête sur un minimum local : une partition que plus aucun tour n'améliore, alors qu'une autre a une inertie plus petite. Dans l'exemple du cours, douze lots de dattes donnent une inertie de 27 depuis un départ, et de 248 depuis un autre. On relance donc depuis plusieurs départs et l'on garde la plus petite inertie.

Quelle différence entre k plus proches voisins et k-moyennes ?

Les deux noms se ressemblent, et le rapport du jury du concours CCINP 2026 (filières PC et PSI) relève beaucoup de confusion entre les deux. Les k plus proches voisins sont un algorithme d'apprentissage supervisé : ils reçoivent des données étiquetées et un objet nouveau, et renvoient une classe, choisie par le vote des kk données les plus proches. Ici, kk est le nombre de voisins consultés, et tout le calcul se fait à chaque prédiction. Les k-moyennes sont un algorithme d'apprentissage non supervisé : ils reçoivent des points sans étiquette et renvoient une partition en kk groupes avec leurs centres, calculée tour après tour jusqu'à l'arrêt. Ici, kk est le nombre de groupes cherchés. Ce qui peut tromper n'est pas le même non plus : pour les voisins, un kk mal choisi, des attributs d'échelles différentes ou une évaluation sur les données d'apprentissage ; pour les k-moyennes, le choix des centres de départ, le minimum local et le groupe vide. Sur une copie, écrire « kk voisins » ou « kk groupes » montre qu'on ne les confond pas.

Comment y accéder

Ce chapitre fait partie des chapitres offerts : il s'ouvre en entier avec un compte d'essai gratuit pour les filières dont il est l'un des premiers chapitres. Créer un compte d'essai ou se connecter. Pour l'accès complet et les tarifs, vois les offres.

Toute ta prépa au même endroit

Pour chaque chapitre : le cours, l'essentiel, les méthodes, les pièges, les exercices corrigés, les problèmes de concours, et un assistant qui répond à tes questions. Programmes du Maroc et de France. Avec la plateforme vidéo YOUNESS SCHOOL offerte, dès 600 DH (60 $) par mois, sans engagement.

Prépas scientifiques : voir l'offrePrépas ECS et ECT : voir l'offreTu hésites encore ? Essaie gratuitement Prepa Help.

← Plus courts chemins et applications : Dijkstra, A*, Floyd-Warshall, coloration