Menu
CoddyTech

Sous-apprentissage et surapprentissage

Fait partie de la section Apprentissage supervisé du Journey Machine Learning de Coddy. Leçon 32 sur 58.

Vous avez rencontré le plus grand piège de l’apprentissage automatique : k = 1 et les arbres profonds mémorisés. Ce chapitre lui donne un nom et se termine par des graphiques comme celui-ci :

Précision d’entraînement et de validation d’un arbre selon sa profondeur : la précision d’entraînement grimpe vers 1.0, celle de validation atteint son maximum à la profondeur 3 puis baisse. Une ligne en pointillés indique la profondeur choisie, une étoile rouge son unique score de test, 0.82

Le piège : 15 plants de basilic, arrosés différemment, et trois courbes ajustées à leur récolte :

Récoltes de feuilles de 15 plants d’entraînement représentées par des points gris et de 5 plants de test représentées par des carrés noirs, en fonction de la quantité d’eau quotidienne. Une droite bleue ne suit pas le sommet, une courbe verte de degré 3 le suit, une courbe rouge de degré 12 oscille de façon erratique entre les points

Le degré 1 est trop simple : sous-apprentissage. Le degré 12 passe par chaque point d’entraînement, en oscillant entre eux : surapprentissage, il mémorise au lieu d’apprendre.

np.polyval(coefs, x) donne les hauteurs d’une courbe. RMSE d’entraînement et de test, en grammes :

for degree in [1, 3, 12]:
    coefs = np.polyfit(water_train, grams_train, degree)
    train_err = np.sqrt(mean_squared_error(grams_train, np.polyval(coefs, water_train)))
    test_err = np.sqrt(mean_squared_error(grams_test, np.polyval(coefs, water_test)))
    print(degree, round(train_err), round(test_err))

Cela affiche :

1 156 138
3 15 19
12 9 173

Le signe du surapprentissage : une faible erreur d’entraînement, une grande erreur de test.

challenge icon

Défi

Moyen

Un parc éolien modélise la puissance d’une éolienne en fonction de la vitesse du vent. Le code de départ répartit ses 24 mesures et lit max_degree.

  1. Pour chaque degré de 1 à max_degree, ajustez une courbe sur les lignes d’entraînement ; affichez sa RMSE d’entraînement et de test en kW entiers.
  2. Affichez le premier degré dont l’erreur de test est supérieure à deux fois l’erreur d’entraînement, ou No overfitting up to degree et max_degree.

Pour une autre éolienne et 7 :

Degree 1: train 117 kW, test 172 kW
Degree 2: train 115 kW, test 182 kW
Degree 3: train 64 kW, test 85 kW
Degree 4: train 63 kW, test 79 kW
Degree 5: train 47 kW, test 67 kW
Degree 6: train 47 kW, test 65 kW
Degree 7: train 23 kW, test 85 kW
Overfitting starts at degree 7

Essayez vous-même

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

max_degree = int(input())

# Ne modifiez pas les lignes ci-dessous : vitesse du vent (m/s) et puissance (kW) d’une éolienne
speed = np.array([3.8, 4.3, 5.1, 5.6, 5.6, 6.7, 6.8, 7.2, 7.8, 8.5, 8.9, 9.1,
                  10.2, 10.9, 11.4, 11.9, 12.2, 12.4, 12.6, 13.2, 13.9, 14.4, 15.5, 16.5])
power = np.array([0, 85, 179, 22, 17, 126, 255, 273, 419, 545, 612, 665,
                  913, 1120, 1114, 1227, 1299, 1400, 1293, 1329, 1396, 1493, 1461, 1552])
speed_train, speed_test, power_train, power_test = train_test_split(
    speed, power, test_size=0.25, random_state=0)

# Écrivez votre code ci-dessous
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Apprentissage supervisé

Entraînez-vous par vous-même : Compilateur Python en ligne