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 :
Le piège : 15 plants de basilic, arrosés différemment, et trois courbes ajustées à leur récolte :
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 173Le signe du surapprentissage : une faible erreur d’entraînement, une grande erreur de test.
Défi
MoyenUn 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.
- 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. - Affichez le premier degré dont l’erreur de test est supérieure à deux fois l’erreur d’entraînement, ou
No overfitting up to degreeetmax_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 7Essayez 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
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é
1Votre premier modèle
Apprendre à partir d’exemplesJeux d’entraînement et de testAjuster et prédireÉvaluer un modèleRécapitulatif : trieur de graines4Régression logistique
Prédictions oui ou nonLe seuil de décisionLes poids comme indicesPlusieurs classesRécapitulatif : filtre anti-spam7Surapprentissage
Sous-apprentissage et surapprentissageCourbes d’apprentissageRégularisationEnsembles de validationRécapitulatif : régler un arbre2Plus proches voisins
Comment k-NN prend ses décisionsChoisir kFrontières de décisionMettre les voisins à l’échelleRécapitulatif : voisins et vin5Évaluer les classificateurs
La matrice de confusionPrécision et rappelLe score F1Classes déséquilibréesCourbes ROCRécapitulatif : test de dépistage8Validation croisée
Validation K-foldComparer les modèles équitablementRecherche par grilleRécapitulatif : réparations de skateboard11Projet : espèces de manchots
À la rencontre des manchotsPréparer les donnéesChoisir un modèleOptimiser le modèle gagnantDéployer le modèle3Régression linéaire
Prédire des nombresPlusieurs caractéristiquesMesurer les erreursGraphiques des résidusRécapitulatif : locations de vélos6Arbres de décision
Les arbres posent des questionsLire un arbreProfondeur de l’arbreImportance des caractéristiquesRécapitulatif : décisions de prêtEntraînez-vous par vous-même : Compilateur Python en ligne