Adloun

Algorithmique de l'apprentissage : voisins et moyennes

Cours complet · informatique (tronc commun des prépas scientifiques), chapitre 19 · prépas scientifiques, tronc commun

Travailler ce chapitre sur Adloun Exercices corrigés de ce chapitre

<i class="fa-solid fa-compass mr-2" style="color:#9A563B"></i>19.1 Introduction et motivation

Comment un programme reconnaît-il un chiffre manuscrit, un courriel indésirable, une tumeur sur une image ? Pas par une suite de if écrits à la main — personne ne sait écrire la règle « ceci est un 7 ». L'apprentissage automatique renverse la démarche : au lieu de coder la règle, on fournit des exemples, et l'algorithme en tire ses réponses. Ce chapitre présente les deux algorithmes d'apprentissage du programme — choisis parce qu'ils sont simples, géométriques, et représentatifs des deux grandes familles :

l'algorithme des plus proches voisins, pour l'apprentissage supervisé : on dispose d'exemples étiquetés (cette mesure cette catégorie), et il faut classer un nouveau venu — réponse de bon sens : regarder ses voisins les plus proches, et voter ; et l'algorithme des -moyennes, pour l'apprentissage non supervisé : aucune étiquette, seulement un nuage de points — et il faut y découvrir des groupes naturels.

Aucune magie : des distances euclidiennes, des tris, des moyennes et des boucles — tout l'outillage des chapitres précédents. Mais aussi de vraies questions nouvelles, qui font le métier : comment évaluer honnêtement un classifieur (la matrice de confusion, le piège de l'évaluation sur les données d'entraînement) ? pourquoi faut-il normaliser les données ? et que signifie « converger vers un minimum local » — la première rencontre du cours avec un algorithme qui s'arrête sans garantie d'optimalité ?

19.2 Des données aux points : la distance

Définition 19.1Données vectorielles, distance euclidienne

Chaque individu est décrit par attributs numériques — un point de : une fleur par (longueur, largeur) de pétale, un fruit par (masse, diamètre), une image par ses pixels (chapitre 8 : un point de !). La proximité se mesure par la distance euclidienne :


def distance(x: list, y: list) -> float:
    return sum((x[i] - y[i]) ** 2 for i in range(len(x))) ** 0.5

(Pour comparer des distances, le carré suffit — la racine est croissante ; on l'économise souvent.)

AttentionNormaliser, ou la grande dimension écrase la petite

Si l'attribut 1 est une masse en grammes ( à ) et l'attribut 2 un diamètre en mètres ( à ), la distance euclidienne ne voit que la masse : l'écart au carré du diamètre est microscopique en face. Avant tout calcul de distance, ramener les attributs à des échelles comparables — la normalisation min-max envoie chaque attribut sur :

(minimum et maximum calculés sur le jeu d'entraînement, et réappliqués tels quels aux nouveaux points). L'exercice 6 montre un classifieur entier qui change d'avis selon l'unité de mesure — un algorithme correct sur des données mal préparées reste un mauvais système : en apprentissage, la préparation des données fait partie de l'algorithme.

19.3 Les plus proches voisins (apprentissage supervisé)

19.3.1 L'algorithme

Définition 19.2Classifieur des plus proches voisins

Donné un jeu d'entraînement — une liste de couples (point, étiquette) — et un entier , le classifieur prédit l'étiquette d'un nouveau point ainsi : calculer la distance de à tous les points d'entraînement ; retenir les plus proches ; rendre l'étiquette majoritaire parmi eux.


def knn(entrainement: list, x: list, k: int):
    """entrainement : liste de (point, etiquette). Prédit l'étiquette de x."""
    voisins = sorted(entrainement,
                     key=lambda exemple: distance(exemple[0], x))[:k]
    votes = {}
    for point, etiquette in voisins:
        votes[etiquette] = votes.get(etiquette, 0) + 1
    return max(votes, key=lambda e: votes[e])

Un tri par distance (chapitre 9), un comptage par dictionnaire (chapitre 2), un champion (chapitre 2) : l'algorithme tient en quatre lignes d'outillage connu. Pour deux classes, on prend impair — pas d'égalité de vote possible.

Exemple 19.3À la main

Entraînement : classe A en bas à gauche — ; classe B en haut à droite — . Classer avec : les distances au carré vers A sont ; vers B : . Les trois plus proches : [A, ], puis et [A, ] — vote à : A. Le point , lui, a pour trois plus proches voisins [B, ], puis et [B, ] — le point , à , n'est que quatrième et ne vote pas — vote B, B, B B : la frontière passe entre les deux nuages, là où le bon sens la met.

Complexité : Le coût, et son paradoxe

L'« apprentissage » ne coûte rien : le classifieur, c'est le jeu de données — on dit qu'il est paresseux. Toute la facture est à la prédiction : pour les distances, plus le tri — et même sans tri complet, car seuls les plus petits comptent (le champion généralisé, chapitre 2). Pour un service qui prédit des millions de fois sur un gros jeu de données, ce coût par question est le vrai problème du -NN — à l'inverse des méthodes qui paient cher un entraînement puis prédisent en un éclair.

19.3.2 Évaluer honnêtement : la matrice de confusion

Définition 19.4Jeu de test, matrice de confusion

On évalue un classifieur sur des exemples étiquetés qu'il n'a pas vus : le jeu de données est séparé en un jeu d'entraînement et un jeu de test (typiquement , au hasard). La matrice de confusion croise vérité et prédiction : la case compte les exemples de vraie classe prédits .

prédit Aprédit B
vraie classe A
vraie classe B

La diagonale, ce sont les succès — ici de taux de réussite ; hors diagonale, les deux types d'erreurs, qui n'ont presque jamais le même prix : A pris pour des B, B pris pour un A. Si A signifie « patient malade », les malades manqués pèsent plus lourd que le bien-portant inquiété — le taux global de ne le dit pas, la matrice le dit.

ImportantNe jamais s'évaluer sur son entraînement

Évalué sur le jeu d'entraînement, le -NN est parfait par construction : le plus proche voisin de chaque exemple est lui-même — de réussite, qui ne promet rien sur le moindre point nouveau. C'est l'équivalent, pour l'apprentissage, du programme qui code en dur les réponses du jeu de tests (chapitre 10) : réussir l'examen dont on a les corrigés. La règle est absolue : les exemples de test ne servent à rien d'autre — ni à entraîner, ni à normaliser, ni à choisir .

Méthode : Choisir

Petit () : le classifieur épouse chaque exemple, y compris les erreurs d'étiquetage — frontière hachée, surapprentissage (excellent sur l'entraînement, fragile en test). Grand () : tout point reçoit la classe majoritaire globale — frontière inexistante, sous-apprentissage. Entre les deux, un plateau raisonnable : on essaie plusieurs impairs () et l'on retient celui qui maximise le taux de réussite — mesuré sur des données réservées à ce choix, pas sur le test final. L'exercice 5 fait vivre la courbe en U.

19.4 Les -moyennes (apprentissage non supervisé)

19.4.1 L'algorithme

Définition 19.5Algorithme des -moyennes

Donnés points sans étiquettes et un nombre de groupes voulus, l'algorithme cherche centres et l'affectation des points qui minimisent l'inertie — la somme des carrés des distances de chaque point à son centre. Il alterne deux gestes jusqu'à stabilité :

  • affectation : chaque point rejoint le centre le plus proche ;
  • recentrage : chaque centre devient la moyenne des points qui lui sont affectés.

def k_moyennes(points: list, centres: list) -> tuple:
    """centres : positions initiales (k listes). Renvoie (centres, groupes)."""
    while True:
        groupes = [[] for _ in centres]                    # 1. affectation
        for p in points:
            j = min(range(len(centres)),
                    key=lambda i: distance(p, centres[i]))
            groupes[j].append(p)
        nouveaux = [moyenne(g) if g else centres[i]        # 2. recentrage
                    for i, g in enumerate(groupes)]
        if nouveaux == centres:
            return (centres, groupes)                      # stabilité : fini
        centres = nouveaux

def moyenne(groupe: list) -> list:
    d = len(groupe[0])
    return [sum(p[i] for p in groupe) / len(groupe) for i in range(d)]

L'initialisation classique : points du nuage tirés au hasard comme centres de départ.

Proposition 19.6L'algorithme termine

(Complément — la démonstration de la convergence n'est pas au programme, qui demande seulement d'observer les minima locaux.) Chacun des deux gestes fait décroître ou stagner l'inertie : l'affectation, parce que chaque point choisit le centre qui minimise son terme ; le recentrage, parce que la moyenne est le point qui minimise la somme des carrés des distances à un groupe (propriété de la moyenne, cours de probabilités). L'inertie décroît donc à chaque tour effectif ; comme il n'existe qu'un nombre fini d'affectations possibles des points en groupes, et qu'aucune ne peut se répéter (l'inertie aurait remonté), l'algorithme s'arrête — un variant (chapitre 10 !) d'un genre nouveau : une quantité réelle qui décroît sur un ensemble fini d'états.

AttentionConverger, oui — vers quoi, rien ne le dit

Terminer n'est pas réussir : l'algorithme s'arrête dans un minimum local de l'inertie, qui dépend de l'initialisation. Quatre points aux coins d'un rectangle plat (), : initialisés au milieu des largeurs, les centres capturent « haut contre bas » (inertie ) et plus rien ne bouge — alors que « gauche contre droite » (inertie ) est cent fois meilleur (exercice 7 : le constat expérimental demandé par le programme). La parade pratique : plusieurs départs aléatoires, garder la solution d'inertie minimale — on ne prouve toujours rien, on rend l'échec improbable. C'est la première fois du cours qu'un algorithme rend une réponse sans certificat d'optimalité : ni la preuve du glouton (chapitre 7), ni la table exhaustive (chapitre 18) — un compromis assumé, omniprésent en intelligence artificielle.

<i class="fa-solid fa-dumbbell mr-2" style="color:#2E7559"></i>19.5 Exercices résolus

Niveau (Application directe du cours)

Exercice 1 : Le -NN à la main

Avec l'entraînement du cours (A : ; B : ) : classer et pour puis (distances au carré, tableau des voisins, vote). Pour quel point un changement de pourrait-il changer la réponse, et pourquoi pas ici ?

Démonstration (Solution)

Pour : vers A , vers B . : voisin , A. : — A, A, A : A unanime. Pour : vers A , vers B . : , B ; : — B unanime. Aucun basculement possible ici : chaque point de test a ses voisins tous du même côté — les nuages sont bien séparés et les points de test francs. Le ne compte que près de la frontière, là où les voisins panachent les deux classes — un point comme , équidistant des nuages, changerait d'étiquette selon l'arbitrage. (D'où la géométrie à retenir : -NN découpe le plan en zones d'influence, et règle la finesse du découpage — loin de la frontière, tous les se valent.)

Exercice 2 : Implémenter et tester

Compléter knn d'une fonction evaluer(entrainement, test, k) qui renvoie la matrice de confusion (dictionnaire (vraie, predite) -&gt; effectif) et le taux de réussite ; la tester sur les nuages du cours avec quatre points de test étiquetés à la main.

Démonstration (Solution)

def evaluer(entrainement: list, test: list, k: int) -> tuple:
    confusion = {}
    for point, vraie in test:
        predite = knn(entrainement, point, k)
        confusion[(vraie, predite)] = confusion.get((vraie, predite), 0) + 1
    reussite = sum(v for (a, b), v in confusion.items() if a == b)
    return (confusion, reussite / len(test))

test = [([0, 1], "A"), ([3, 2], "A"), ([6, 7], "B"), ([4, 5], "B")]
confusion, taux = evaluer(entrainement, test, 3)
assert taux == 1.0 and confusion == {("A", "A"): 2, ("B", "B"): 2}

Quatre points francs, quatre succès : matrice diagonale, taux — le cas facile, qui valide la mécanique avant d'affronter des données bruitées (exercice 4). (Le dictionnaire à clés-couples (chapitre 17) est le format naturel d'une matrice creuse : seules les cases non nulles existent ; pour l'afficher en tableau, parcourir les classes en ordre fixe — et l'absence d'une clé se lit confusion.get((a, b), 0), le zéro des absents, chapitre 16.)

Exercice 3 : Les -moyennes à la main

Points : ; , centres initiaux et — un mauvais départ : les deux dans le même nuage. Dérouler l'algorithme tour par tour (affectations, recentrages) jusqu'à stabilité ; l'algorithme s'en sort-il ?

Démonstration (Solution)

Tour 1 — affectation : ; ( contre ) ; ; les trois points du nuage droit ( : contre , etc.). Recentrage : , . Tour 2 — affectation : rejoint ( contre ) ; tout le nuage droit reste à . Recentrage : , . Tour 3 — plus aucun point ne change : stabilité, les deux nuages sont retrouvés. Le mauvais départ s'est résorbé : le centre , d'abord tiré vers la droite par les trois points lointains, a fini par émigrer dans leur nuage, libérant . (Les -moyennes corrigent beaucoup d'initialisations médiocres — c'est leur robustesse pratique ; mais pas toutes, et c'est l'exercice 7 : la différence entre « souvent » et « toujours » est précisément ce qu'un minimum local ne garantit pas.)

Niveau (Application avec raisonnement intermédiaire)

Exercice 4 : Lire une matrice de confusion

Un classifieur de courriels (étiquettes spam / normal) donne sur messages de test : . (a) Taux de réussite global. (b) Quelle proportion des spams passe le filtre ? Quelle proportion des messages légitimes est perdue ? (c) Les deux erreurs ont-elles le même coût — et que penser d'un classifieur « tout-normal » à de réussite ?

Démonstration (Solution)

(a) . (b) Spams manqués : des spams atteignent la boîte ; légitimes bloqués : — partis au panier, peut-être un message important. (c) Non : le légitime bloqué coûte généralement bien plus cher (un contrat manqué) que le spam passé (un agacement) — ce classifieur, prudent sur les faux positifs, est probablement bien réglé. Quant au « tout-normal » : … recalcul : il classerait normal les messages, réussite — un score honorable en apparence, pour un filtre qui ne filtre rien. C'est le piège des classes déséquilibrées : le taux global flatte le vote pour la classe majoritaire, et seule la matrice révèle l'inutilité ( des spams détectés). (Toujours comparer un classifieur au « prédicteur de la classe majoritaire » : c'est le zéro de l'échelle, comme le hasard pur l'est pour deux classes équilibrées — un taux de réussite ne se lit jamais dans l'absolu.)

Exercice 5 : La courbe en U — choisir

Générer deux classes gaussiennes qui se chevauchent ( points d'entraînement, de test, random.gauss), évaluer le taux de réussite en test pour , et tracer aussi le taux sur l'entraînement. Décrire et interpréter les deux courbes.

Démonstration (Solution)

import random
random.seed(0)
def nuage(cx, cy, n, etiquette):
    return [([random.gauss(cx, 1.2), random.gauss(cy, 1.2)], etiquette)
            for _ in range(n)]
entrainement = nuage(0, 0, 100, "A") + nuage(2, 2, 100, "B")
test         = nuage(0, 0, 100, "A") + nuage(2, 2, 100, "B")

Allure typique des mesures — entraînement : à (chacun est son propre voisin), décroissant ensuite ; test : médiocre à ( : la frontière épouse le bruit), maximal vers – (–), s'effondrant à (presque tout l'entraînement vote : on tend vers le tout-majoritaire). L'écart entre les deux courbes mesure le surapprentissage : énorme à , nul aux grands . Le bon est au creux du U du test — et le choisir en regardant le test, c'est déjà tricher un peu : en toute rigueur, on réserve un troisième paquet (validation) pour ce réglage, et le test ne sert qu'une fois, à la toute fin. (Deux nuages gaussiens qui se chevauchent ont un taux d'erreur incompressible — le meilleur classifieur du monde ne sépare pas l'inséparable : viser en test sur données bruitées n'est pas un objectif, c'est un symptôme.)

Exercice 6 : Le classifieur qui dépendait du système d'unités

Des fruits décrits par (masse en g, diamètre en cm) : entraînement , , , . (a) Classer — petit diamètre de fraise, masse intermédiaire — avec . (b) Convertir les diamètres en millimètres et reclasser. (c) Normaliser min-max les deux attributs et reclasser. Conclure.

Démonstration (Solution)

(a) En (g, cm), la masse écrase tout : à , à — plus proche voisin la pomme de g : pomme. (b) En (g, mm), le diamètre pèse soudain : à , à , à … la pomme gagne encore, mais de peu — et un point à basculerait : la prédiction dépend de l'unité de mesure, ce qui est scientifiquement indéfendable (le fruit ne change pas avec la règle qui le mesure). (c) Min-max sur l'entraînement : masse sur , diamètre sur — le point devient , les fraises et , les pommes et . à la fraise : ; à la pomme : — fraise, et la réponse est désormais invariante par changement d'unités. (La normalisation n'est pas un raffinement : sans elle, le classifieur encode arbitrairement « un gramme vaut un centimètre » — une hypothèse que personne n'a posée ; tout algorithme à distances — -NN, -moyennes — y est soumis, et l'oubli de normalisation est l'erreur n°1 des débutants en apprentissage.)

Exercice 7 : Le minimum local, en laboratoire

Points : les quatre coins du rectangle plat ; . (a) Calculer l'inertie du partage « gauche/droite » et celle du partage « bas/haut ». (b) Vérifier que l'initialisation , rend l'algorithme immédiatement stable sur le mauvais partage. (c) Estimer, par simulation avec initialisation sur deux points tirés au hasard, la probabilité de tomber sur le bon partage — et conclure sur la stratégie multi-départs.

Démonstration (Solution)

(a) Gauche/droite : centres et , chaque point à — inertie . Bas/haut : centres et , chaque point à — inertie : cent fois pire. (b) Depuis , : le point est à de et de — il choisit ; de même chaque point choisit le centre de sa hauteur. Recentrage : les moyennes redonnent exactement et — rien ne bouge, l'algorithme déclare la convergence sur l'inertie . Aucun geste local ne peut le sauver : il faudrait échanger deux points à la fois, et l'algorithme ne fait que des réaffectations individuellement avantageuses — c'est la définition vécue d'un minimum local. (c) En initialisant sur deux points tirés au hasard parmi les quatre : les paires sont équiprobables — les paires « mixtes » (un point de chaque côté) convergent vers gauche/droite, et les paires d'un même côté convergent toujours vers le mauvais partage bas/haut (l'affectation initiale sépare déjà les deux hauteurs, et plus rien ne bouge) : la probabilité exacte d'un bon départ est — la simulation le confirme, et surtout : sur départs indépendants, la probabilité de tous les rater devient négligeable — garder la meilleure inertie des dix est la police d'assurance standard. (L'inertie joue ici le rôle du certificat relatif : elle ne dit pas « c'est l'optimum », elle permet de comparer les candidats — et c'est assez pour que la stratégie multi-départs fonctionne ; on retrouvera ce schéma partout où l'optimisation est non convexe, c'est-à-dire partout en intelligence artificielle moderne.)

Niveau (Raisonnement subtil ou plusieurs étapes)

Exercice 8 : Dessiner la frontière de décision

Pour l'entraînement gaussien de l'exercice 5 : évaluer knn sur une grille de points couvrant le plan (pas ) et afficher la carte des prédictions (matplotlib, chapitre 4 — un point coloré par case), pour puis . Décrire les deux frontières et relier à la courbe en U.

Démonstration (Solution)

import matplotlib.pyplot as plt
xs, ys, couleurs = [], [], []
pas = 0.2
for i in range(-20, 31):
    for j in range(-20, 31):
        x, y = i * pas, j * pas
        xs.append(x); ys.append(y)
        couleurs.append("tab:blue" if knn(entrainement, [x, y], 25) == "A"
                        else "tab:orange")
plt.scatter(xs, ys, c=couleurs, s=8)         # la carte des décisions

À : une frontière déchiquetée, constellée d'îlots — chaque point d'entraînement isolé en territoire adverse possède sa petite enclave (il est le plus proche voisin de son voisinage immédiat) : le surapprentissage se voit, ce sont les îlots du bruit. À : une frontière lisse, quasi rectiligne entre les deux nuages, les îlots engloutis par le vote — et au-delà (), la frontière sortirait du cadre : tout deviendrait majoritaire. La courbe en U de l'exercice 5 est la traduction chiffrée de cette géométrie : les îlots de sont autant de zones où le test se trompe, la rigidité des très grands aussi. (La carte de décision est l'outil de diagnostic visuel de tout classifieur 2D — l'analogue apprentissage du tracé de fonctions du chapitre 4 : quand les nombres se disputent, dessiner ; au-delà de deux dimensions, on perd ce luxe, et c'est précisément pourquoi les matrices de confusion existent.)

Exercice 9 : Compresser une image par -moyennes

Une image en niveaux de gris (chapitre 8) doit être réduite à niveaux. (a) Expliquer pourquoi c'est un problème de -moyennes en dimension (points les valeurs des pixels). (b) Implémenter : regrouper les valeurs, remplacer chaque pixel par le centre de son groupe. (c) Sur l'image-test du dégradé (chapitre 8), que donnent les centres ? Quel est le taux de compression, et que devient-il pour une vraie photo ?

Démonstration (Solution)

(a) Chaque pixel est un point de (sa valeur –) ; chercher les niveaux qui représentent au mieux l'image, c'est minimiser la somme des carrés des écarts pixel-niveau : la définition exacte de l'inertie des -moyennes — la « quantification » est un partitionnement déguisé. (b)


def quantifier(image: list, k: int) -> list:
    valeurs = [[float(v)] for ligne in image for v in ligne]
    centres, _ = k_moyennes(valeurs, valeurs[::len(valeurs) // k][:k])
    def niveau(v):
        return round(min(centres, key=lambda c: abs(c[0] - v))[0])
    return [[niveau(v) for v in ligne] for ligne in image]

(c) Sur un dégradé uniforme –, les centres convergent vers les quarts d'étendue () : l'image quantifiée est un escalier de quatre paliers — le posterize des logiciels de retouche. Compression : niveaux bits par pixel au lieu de , facteur (plus la table des centres, négligeable). Sur une photo, les centres ne sont pas équirépartis : ils se densifient là où l'histogramme s'accumule (les zones de peau, le ciel) — c'est la force des -moyennes sur la quantification uniforme : adapter les niveaux aux données. (En couleurs, même algorithme en dimension — les pixels , les centres devenant la palette : la quantification chromatique des vieux formats d'image, c'est mot pour mot l'algorithme de ce chapitre, et le voir opérer referme la boucle ouverte au chapitre 8.)

Exercice 10 : Le protocole complet — un mini-projet supervisé

Rédiger et exécuter le protocole intégral sur des données synthétiques à trois classes ( points, gaussiennes en triangle) : séparation (entraînement / validation / test), normalisation min-max apprise sur l'entraînement seul, choix de sur la validation, évaluation finale unique sur le test avec matrice de confusion — et la liste des fautes de protocole qui invalideraient chaque étape.

Démonstration (Solution)

Le pipeline, dans l'ordre et avec ses interdits : (1) Séparer d'abord — avant toute statistique : mélanger (random.shuffle), couper . Faute évitée : normaliser puis séparer — les min/max auraient « vu » le test, fuite d'information (modeste ici, fatale en général). (2) Normaliser : min/max calculés sur les points d'entraînement, appliqués tels quels aux autres — quitte à ce qu'un point de test sorte de : c'est normal, et c'est le réel. (3) Choisir : pour , entraîner sur les , mesurer sur la validation — courbe en U, maximum typique vers – ( : trois gaussiennes qui se touchent). Faute évitée : choisir sur le test — le test devient une validation déguisée et son chiffre final ment. (4) Évaluer une fois : le élu, prédire les points de test, publier la matrice — typiquement forte diagonale et confusions concentrées entre les deux classes géométriquement voisines : la matrice localise la difficulté (quelles classes se ressemblent), ce que le taux global ne dira jamais. (5) Geler : tout réglage ultérieur (changer , re-normaliser) au vu du test impose un nouveau jeu de test. (Ce protocole en cinq temps est le squelette de tout projet d'apprentissage, du TP au laboratoire ; les algorithmes changeront — réseaux de neurones compris — le protocole, non : c'est lui, bien plus que l'algorithme, qui sépare une mesure honnête d'une illusion d'optique, et c'est la leçon que ce chapitre voulait laisser.)

Synthèse du chapitre (à retenir)
  • Cadre : individus points de , proximité distance euclidienne (comparer les carrés suffit) ; normaliser (min-max sur l'entraînement seul) — sans quoi l'attribut à grande échelle décide seul, et la prédiction dépend des unités.
  • -NN (supervisé) : prédire l'étiquette majoritaire des plus proches exemples étiquetés ; impair (deux classes) ; apprentissage gratuit, prédiction ; petit surapprentissage (îlots du bruit), grand tout-majoritaire — choisir au creux du U, sur des données de validation.
  • Évaluation : séparation entraînement / (validation) / test ; jamais s'évaluer sur l'entraînement (-NN y est parfait par construction) ; matrice de confusion (vraie classe prédite) : taux global sur la diagonale, mais surtout les deux types d'erreurs et leurs coûts asymétriques ; toujours se comparer au prédicteur de la classe majoritaire (classes déséquilibrées : un taux flatteur peut cacher un filtre qui ne filtre rien).
  • -moyennes (non supervisé) : alterner affectation (chaque point au centre le plus proche) et recentrage (centre moyenne du groupe) jusqu'à stabilité ; l'inertie (somme des aux centres) décroît à chaque tour et les affectations sont en nombre fini terminaison (un variant réel sur états finis) — mais convergence vers un minimum local dépendant de l'initialisation (le rectangle plat : inertie contre , et stable) : multi-départs, garder la meilleure inertie.
  • Applications du moule : carte de décision (le diagnostic visuel en 2D) ; quantification d'image -moyennes sur les valeurs de pixels (palette adaptée à l'histogramme, chapitre 8 bouclé).
  • Le protocole avant l'algorithme : séparer d'abord, normaliser sur l'entraînement, régler sur la validation, tester une fois — toute fuite du test vers l'amont invalide le chiffre final ; première rencontre avec les réponses sans certificat : terminer n'est pas optimiser, mesurer n'est pas prouver.

19.6 Exercices d'entraînement

Cette banque d'exercices, classée par thème, couvre l'intégralité du chapitre. La numérotation prolonge celle des dix exercices résolus. Légende : application directe, raisonnement intermédiaire, approfondissement ; le symbole signale un classique incontournable.

A. plus proches voisins

B. Évaluation

C. -moyennes

D. Études

Continuer sur Adloun : animation, QCM, fiches, exercices