Le machine learning en partant de zéro · Leçon 3.1 · 14 sur 33 leçons prêtes · 10 min
Surapprentissage : quand un modèle apprend par cœur
En bref
Un modèle souple peut coller parfaitement à ses données d’entraînement et échouer sur de nouvelles. Quand le degré d’un polynôme monte, les erreurs divergent.
Échauffement Deux questions de leçons précédentes. Une minute, sans jamais bloquer la leçon.
Deux élèves préparent un examen de maths. L’un travaille les idées derrière les exercices. L’autre apprend par cœur, mot pour mot, les corrigés de toutes les annales. Sur les annales, le second est impeccable. Puis arrive le vrai examen, avec de nouveaux nombres. Sur qui pariez-vous ? Les modèles font exactement face à ce choix, et livré à lui-même, un modèle flexible deviendra volontiers le second élève.
Choisissez une réponse et votre degré de certitude.
Répondez pour débloquer le labo.
Labo interactif
Ce labo interactif fonctionne dans un navigateur avec JavaScript activé. Le texte qui l’entoure décrit ce qu’il montre.
Voir la réponse
Bonne réponse : Degré 1 (une simple droite)
Le degré 1 est le meilleur : erreur de test de 64,1. Le degré 3 donne 65,2, le degré 6 donne 70,3 et le degré 10 pas moins de 132,6, alors que l’erreur d’entraînement passe de 60,2 (degré 1) à 51,1 (degré 10). Plus de flexibilité réduit l’erreur d’entraînement, pas l’erreur de test.
À vous de jouer
- Commencez au degré 1 et notez les deux erreurs. Puis montez le curseur du degré cran par cran et regardez l’erreur d’entraînement baisser.
- Continuez et surveillez l’erreur de test. Trouvez le degré où elle est la plus basse – c’est le point idéal pour cet échantillon.
- Poussez le curseur du degré au maximum. Regardez la courbe entre les points : décrit-elle encore de façon sensée le lien entre l’IMC et la progression ?
- Comparez l’écart entre erreur d’entraînement et erreur de test au degré le plus bas et au plus élevé. Un écart qui grandit est l’empreinte digitale du surapprentissage.
L’idée en quelques mots
Voyons maintenant ce que vous venez de manipuler, en termes simples.
Dans la leçon 3, nous avons ajusté une droite. Une droite est rigide : elle ne peut pas se plier pour suivre une courbe, même quand les données sont clairement courbées. Un polynôme est une famille de courbes plus souple :
ŷ = w₀ + w₁x + w₂x² + … + w_d·x^d
Le degré d règle la souplesse. Le degré 1 est la droite ; le degré 2 peut faire un virage ; les degrés plus élevés peuvent onduler de plus en plus. Avec un degré suffisant, un polynôme peut passer par chacun des points d’entraînement.
Cela ressemble à un succès, mais les vraies données contiennent du bruit – une variation aléatoire qu’aucune variable n’explique. Deux patients au même IMC ne progressent pas de la même façon. Un modèle assez souple pour toucher chaque point n’apprend pas seulement la tendance ; il apprend aussi le bruit, les accidents de cet échantillon particulier. C’est le surapprentissage (overfitting) : le modèle colle de mieux en mieux aux données d’entraînement tandis que ses prédictions sur de nouvelles données empirent. L’échec inverse, un modèle trop rigide pour capter la vraie tendance, s’appelle le sous-apprentissage (underfitting).
Pourquoi ça marche
Prenons un petit échantillon aléatoire des patients diabétiques de la leçon 3 et répartissons-le en points d’entraînement et points de test. Un petit échantillon rend l’effet facile à voir, car quelques points inhabituels peuvent faire dévier loin une courbe souple.
Suivons ce qui arrive aux deux erreurs quand le degré augmente. L’erreur d’entraînement ne cesse de baisser : une courbe plus souple peut toujours faire au moins aussi bien sur les points sur lesquels elle est ajustée, puisqu’elle peut imiter n’importe quelle courbe plus simple. L’erreur de test se comporte autrement. D’abord, elle baisse aussi, parce que la souplesse supplémentaire capte une vraie structure. Puis, au-delà d’un certain degré, elle remonte, parce que la courbe se plie désormais pour courir après des points d’entraînement isolés, et ces plis sont faux pour tous les autres. Le résultat est la fameuse courbe en U de l’erreur de test.
La raison porte un nom : le compromis biais-variance. Un modèle rigide a un biais élevé – il se trompe de façon systématique, quel que soit l’échantillon qu’il voit. Un modèle très souple a une variance élevée – tirez un échantillon légèrement différent et vous obtenez une courbe complètement différente. Le meilleur modèle se situe entre les deux, assez souple pour suivre le signal et assez rigide pour ignorer le bruit. L’emplacement de ce point dépend de la quantité de données : avec plus de données, le bruit se compense et davantage de souplesse devient sans danger.
Erreur fréquente
L’erreur fondamentale consiste à choisir la complexité d’un modèle d’après l’erreur d’entraînement. L’erreur d’entraînement récompense toujours plus de souplesse, donc elle votera toujours pour le modèle le plus complexe – l’élève qui apprend par cœur. La seconde erreur est de croire que le surapprentissage est rare ou exotique. C’est le comportement par défaut de tout modèle souple sur des données limitées, ce qui couvre les arbres de décision, les réseaux de neurones et la plupart de ce que vous construirez. Le remède n’est pas d’éviter les modèles souples, mais de les maîtriser : modèles plus simples, plus de données, ou régularisation, qui pénalise les poids extrêmes.
Ce raisonnement cache un piège : nous avons choisi le meilleur degré en regardant l’erreur de test, exactement ce contre quoi la leçon 2 mettait en garde. Dans la prochaine leçon, nous apprenons à choisir les réglages honnêtement, grâce à la validation et à la validation croisée.
Trouvez l’erreur de l’IA
Voici la réponse d’un chatbot. Une phrase est fausse. Laquelle ?
Question : J’ai ajusté des polynômes de degré 1 à 10 sur 30 patients, IMC contre progression de la maladie. Quel degré dois-je choisir ?
Montrer la phrase fausse
La phrase fausse : Le degré qui a la plus petite erreur d’entraînement, ici le degré 10, est donc aussi celui qui prédira le mieux les nouveaux patients.
L’erreur d’entraînement récompense toujours la flexibilité, elle ne peut donc pas servir à choisir le degré. Dans la leçon, le degré 10 a la plus petite erreur d’entraînement (51,1 contre 60,2 pour le degré 1), mais son erreur de test est de 132,6, plus du double des 64,1 de la droite.
Quiz
Trois questions pour vérifier vos acquis. Choisissez une réponse ou dépliez la solution sous chaque question. Au clavier : les flèches choisissent, Entrée ou Espace valide.
À retenir
- Le surapprentissage, c’est apprendre le bruit des données d’entraînement, ce qui dégrade la performance en test.
- L’erreur d’entraînement récompense toujours la souplesse ; seules des données dont le modèle n’a pas appris révèlent le surapprentissage.
- L’erreur de test dessine typiquement un U quand la complexité augmente : sous-apprentissage d’un côté, surapprentissage de l’autre.
- Plus de données, des modèles plus simples et la régularisation réduisent tous le surapprentissage.
Pour aller plus loin : formule, code, pratique
Les maths
Un polynôme de degré d a d + 1 poids : ŷ = w₀ + w₁x + … + w_d·x^d. L’ajustement par moindres carrés minimise l’erreur d’entraînement. Tout polynôme de degré d − 1 est aussi un polynôme de degré d (avec w_d = 0), donc la meilleure erreur d’entraînement ne peut que rester la même ou baisser quand d augmente. Avec n points tous de x différents, le degré n − 1 passe par chaque point et l’erreur d’entraînement est nulle.
L’erreur de test se décompose en trois parties : E[(y − ŷ)²] = bias² + variance + σ². Le biais est l’écart systématique d’un modèle trop rigide. La variance mesure de combien la courbe ajustée change d’un échantillon à l’autre. σ² est le bruit que personne ne peut supprimer. Un degré plus élevé réduit le biais et augmente la variance, ce qui donne la forme en U.
Le lab donne la REQM, √MSE, dans les unités de la cible.
En code (Python)
Trente patients diabétiques tirés au hasard comme jeu d’entraînement, les autres patients (dans la plage d’IMC de l’entraînement) comme jeu de test. C’est le même genre d’expérience que dans le lab, mais avec un autre échantillon aléatoire, donc les nombres diffèrent de ceux du lab :
import numpy as np
from sklearn.datasets import load_diabetes
X, y = load_diabetes(return_X_y=True, as_frame=True, scaled=False)
x, y = X["bmi"].to_numpy(), y.to_numpy()
perm = np.random.default_rng(0).permutation(len(x))
tr, te = perm[:30], perm[30:]
te = te[(x[te] >= x[tr].min()) & (x[te] <= x[tr].max())] # rester dans la plage d'entraînement
rmse = lambda i, p: np.sqrt(np.mean((y[i] - p(x[i])) ** 2))
for deg in (1, 3, 10):
p = np.polynomial.Polynomial.fit(x[tr], y[tr], deg) # ajuste sur un x remis à l'échelle, donc le degré 10 est stable
print(f"degree {deg:2d}: train RMSE {rmse(tr, p):6.1f}, test RMSE {rmse(te, p):6.1f}")
Sortie
degree 1: train RMSE 61.6, test RMSE 63.5
degree 3: train RMSE 60.9, test RMSE 63.8
degree 10: train RMSE 54.7, test RMSE 199.5
L’erreur d’entraînement continue de baisser avec le degré. L’erreur de test du degré 10 est plus de trois fois celle du degré 1.
Télécharger le notebook (.ipynb). Ouvrez-le dans Jupyter ou importez-le dans Google Colab ; il télécharge lui-même les données manquantes.
Pour les praticiens
- Ne choisissez jamais le degré, ni aucun autre réglage de flexibilité, d’après l’erreur d’entraînement. Elle vote toujours pour le modèle le plus flexible.
- Regardez l’écart entre l’erreur d’entraînement et l’erreur de test. Une petite erreur d’entraînement avec une grande erreur de test signifie surapprentissage. Si les deux erreurs sont élevées, c’est du sous-apprentissage.
- Les polynômes de degré élevé explosent en dehors de la plage des données d’entraînement. Ne les utilisez pas pour extrapoler.
- Avec un seul petit échantillon, l’image est bruitée. Répétez le découpage avec plusieurs graines avant de vous fier à un « meilleur degré ».
- Pour tenir un modèle flexible en bride, essayez plus de données, un modèle plus simple ou la régularisation (ridge, lasso) avant de renoncer entièrement à la flexibilité.
Cela vous a-t-il aidé ?
Merci ! Cela nous aide à nous améliorer.
Aller plus loin dans l’Atlas
Articles de l’encyclopédie sur les notions de cette leçon :