En apprentissage supervisé, tu montres à la machine des exemples dont tu connais déjà la réponse, elle en tire une règle de prédiction, et tu vérifies cette règle sur des cas qu'elle n'a jamais vus. Un fournisseur d'électricité sait, grâce à une enquête, quels foyers se chauffent à l'électricité : à partir de leur consommation, la machine apprend à le deviner pour ses autres clients. Ici, pas une ligne de code : tu fais tourner un vrai algorithme à la main, sur de petits tableaux.
Les mots du supervisé
Définition : l'apprentissage supervisé est un apprentissage automatique dans lequel l'algorithme s'entraîne à une tâche précise sur un jeu de données qui portent chacune une annotation indiquant le résultat attendu.
C'est, en substance, la définition publiée au Journal officiel du 9 décembre 2018, qui fait aussi d'« apprentissage automatique » le terme français recommandé pour machine learning.
Voici les données du fournisseur (données fictives), en kWh consommés par jour en moyenne :
| Foyer | Janvier | Juillet | Chauffage électrique |
|---|---|---|---|
| A | 40 | 10 | oui |
| B | 35 | 9 | oui |
| C | 28 | 8 | oui |
| D | 14 | 8 | non |
| E | 18 | 10 | non |
| F | 24 | 11 | non |
Chaque ligne est une observation, ici un foyer. Janvier et juillet, connus pour tous les clients, sont les variables explicatives (en anglais, features). La colonne à prédire est l'étiquette, ou variable cible. Les lignes étiquetées qui servent à apprendre forment le jeu d'entraînement.
Quand l'étiquette est une catégorie, comme ici, on parle de classification ; quand c'est un nombre, de régression. Sans étiquette, on passe au non supervisé, qui ne peut que regrouper les données qui se ressemblent.
Apprendre, c'est généraliser
Un modèle est une fonction $f$ qui associe à une observation $x$ une prédiction $\hat{y} = f(x)$, lue « y chapeau ». Ici, $x = (x_1\,;x_2)$ réunit les deux consommations et $\hat{y}$ vaut « oui » ou « non ». Apprendre, c'est choisir $f$ à partir des exemples.
Mais bien répondre pour A à F n'a aucun intérêt : leurs étiquettes, on les a. Le but est de bien répondre pour un foyer N, absent de l'enquête. Réussir sur des cas nouveaux s'appelle généraliser.
L'idée de fond : des observations qui se ressemblent ont souvent la même étiquette. L'algorithme suivant l'applique à la lettre.
Les plus proches voisins, à la main
Place chaque foyer dans un repère, comme le point de coordonnées $(x_1\,;x_2)$. La ressemblance se mesure alors par la distance usuelle du plan, dite euclidienne.
Formule : la distance entre les points $N(n_1\,;n_2)$ et $P(p_1\,;p_2)$ est
$$d(N,P) = \sqrt{(n_1 - p_1)^2 + (n_2 - p_2)^2}$$
La méthode des $k$ plus proches voisins ($k$ entier fixé d'avance) se déroule ainsi.
Étape 1 : calculer la distance entre le nouveau point et chaque exemple.
Étape 2 : garder les $k$ exemples les plus proches.
Étape 3 : prédire l'étiquette majoritaire parmi eux en classification, la moyenne de leurs valeurs en régression.
C'est la règle que décrit la documentation de scikit-learn, une bibliothèque Python d'apprentissage automatique. Le foyer N consomme 26 kWh par jour en janvier et 9 en juillet. Sa distance à $A(40\,;10)$ vérifie :
$$d^2 = (26 - 40)^2 + (9 - 10)^2 = 196 + 1 = 197$$
De la même façon, $d^2$ vaut 81 pour B, 5 pour C, 145 pour D, 65 pour E et 8 pour F.
Conseil : pour ranger les voisins, inutile de prendre les racines. La racine carrée est croissante, donc les $d^2$ se rangent dans le même ordre que les distances.
Du plus proche au plus loin : C, F, E, B, D, A. Avec $k = 1$, seul C compte : la prédiction est « oui ». Avec $k = 3$, C vote oui mais F et E votent non : « non » l'emporte, deux voix contre une.
Deux réponses opposées pour le même foyer. Le nombre $k$ ne s'apprend pas sur les exemples, c'est toi qui le fixes : on l'appelle un hyperparamètre. Avec deux étiquettes, prends-le impair pour éviter les égalités. Un $k$ plus grand atténue l'effet des exemples atypiques, mais rend la frontière entre les classes moins nette.
Piège classique : la distance additionne des écarts bruts. Ici, tout est en kWh. Mais avec des euros d'un côté et des commandes de l'autre, un euro d'écart pèserait autant qu'une commande, et la variable aux grands nombres déciderait seule. Ramène d'abord chaque variable à la même échelle, par exemple en divisant ses écarts par son étendue (maximum moins minimum).
Juger un modèle sur des cas jamais vus
Avec $k = 1$, le modèle ne se trompe sur aucun des foyers A à F. On serait tenté de s'en contenter.
Piège classique : ce zéro ne prouve rien. Chaque foyer est à distance 0 de lui-même, donc il est son propre plus proche voisin et le modèle recopie son étiquette. Coller ainsi aux exemples, bizarreries comprises, au lieu d'en tirer une règle, s'appelle le surapprentissage.
La bonne méthode : avant d'apprendre, mets de côté une partie des observations étiquetées, le jeu de test, que le modèle ne verra pas. Compare ensuite ses prédictions sur ces cas à leurs vraies étiquettes :
$$\text{taux d'erreur} = \frac{\text{nombre de prédictions fausses}}{\text{nombre de cas testés}}$$
On garde le $k$ qui se trompe le moins sur ces cas. Mais si tu essaies beaucoup de valeurs de $k$ sur le même jeu de test, son score devient trop flatteur, puisqu'il a servi à choisir. On règle donc $k$ sur un troisième jeu, dit de validation, et le test ne sert qu'une fois, à la fin.
Exercices corrigés
Cherche chacun sur ta feuille avant d'ouvrir la correction.
Exercice 1 : Un loueur de vélos prévoit ses locations d'une journée à partir de la température. Ses données (fictives) : 8 °C, 120 locations ; 12 °C, 150 ; 15 °C, 210 ; 18 °C, 260 ; 21 °C, 300 ; 25 °C, 280.
a) Avec $k = 3$, prévois les locations d'une journée à 17 °C.
b) Que prévoit-on avec $k = 6$, à 17 °C puis à 9 °C ? Qu'en conclus-tu ?
Correction :
a) L'étiquette est un nombre, donc on fera une moyenne. Avec une seule variable, la distance est l'écart de température : $|17 - 8| = 9$, puis 5, 2, 1, 4 et 8 degrés. Les trois plus proches sont 18 °C, 15 °C et 21 °C :
$$\hat{y} = \frac{260 + 210 + 300}{3} = \frac{770}{3} \approx 256{,}7$$
soit environ 257 locations.
b) Avec $k = 6$, les six journées entrent toujours dans la moyenne : $\hat{y} = \dfrac{1\,320}{6} = 220$ locations, à 17 °C comme à 9 °C. Le modèle ignore la température : un $k$ trop grand le rend trop grossier pour suivre les données, c'est le sous-apprentissage.
Exercice 2 : Sur 200 foyers d'entraînement et 60 de test (données fictives), un modèle avec $k = 1$ fait 0 erreur à l'entraînement et 18 en test ; avec $k = 7$, il en fait 14 à l'entraînement et 9 en test.
a) Calcule les quatre taux d'erreur.
b) Quel réglage garder ? Pourquoi le 0 % de $k = 1$ ne compte-t-il pas ?
Correction :
a) Pour $k = 1$ : $\dfrac{0}{200} = 0$ à l'entraînement, et $\dfrac{18}{60} = 0{,}30$, soit 30 %, en test. Pour $k = 7$ : $\dfrac{14}{200} = 0{,}07$, soit 7 %, et $\dfrac{9}{60} = 0{,}15$, soit 15 %.
b) On garde $k = 7$ : sur des foyers jamais vus, il se trompe deux fois moins (15 % contre 30 %). Le 0 % de $k = 1$ était joué d'avance : chaque foyer d'entraînement est son propre plus proche voisin. L'écart entre 0 % et 30 % signe le surapprentissage.
Exercice 3 : Une boutique en ligne classe ses clients en « fidèle » ou « occasionnel » selon leurs commandes par an et leur panier moyen. Dans ses données (fictives), les commandes vont de 0 à 12 par an et le panier moyen de 20 à 120 €. P (2 commandes, 62 €) est occasionnel, Q (8 commandes, 75 €) est fidèle. Le nouveau client N passe 8 commandes, avec un panier de 60 €. On compare N à P et Q seulement, avec $k = 1$.
a) Avec les valeurs brutes, quel client est le plus proche de N ? Que prédit-on ?
b) Même question après avoir divisé chaque écart par l'étendue de sa variable.
Correction :
a) $d^2(N,P) = (8 - 2)^2 + (60 - 62)^2 = 36 + 4 = 40$ et $d^2(N,Q) = (8 - 8)^2 + (60 - 75)^2 = 0 + 225 = 225$. P est le plus proche : N est prédit occasionnel, alors qu'il commande quatre fois plus que P. Les 15 € d'écart avec Q ont écrasé les 6 commandes d'écart avec P.
b) Les étendues valent $12 - 0 = 12$ commandes et $120 - 20 = 100$ €. Alors $d^2(N,P) = \left(\dfrac{6}{12}\right)^2 + \left(\dfrac{2}{100}\right)^2 = 0{,}25 + 0{,}0004 = 0{,}2504$ et $d^2(N,Q) = 0^2 + \left(\dfrac{15}{100}\right)^2 = 0{,}0225$. Cette fois, Q est le plus proche et N est prédit fidèle, ce qui colle aux données : il commande autant que Q, pour un panier à peine différent.
À retenir
À retenir :
- Supervisé : chaque exemple d'entraînement porte son étiquette, le résultat attendu ; sans étiquette, c'est du non supervisé.
- Étiquette catégorie : classification ; étiquette nombre : régression.
- Plus proches voisins : distances, $k$ exemples les plus proches, puis vote ou moyenne.
- Compare les $d^2$, sur des variables mises à la même échelle.
- $k$ trop petit récite les exemples, $k$ trop grand ne regarde plus le cas.
- Un modèle se juge sur des cas jamais vus ; $k$ se règle sur la validation.
Sources
- Commission d'enrichissement de la langue française, « Vocabulaire de l'intelligence artificielle (liste de termes, expressions et définitions adoptés) », Journal officiel du 9 décembre 2018 : texte sur Légifrance.
- Documentation de scikit-learn, guide de l'utilisateur, partie « Nearest Neighbors » (en anglais) : page sur scikit-learn.org.