Data Science & ML · L3 · Section 2/12
Apprentissage supervisé
Progression
#Apprentissage supervisé
L'apprentissage supervisé consiste à apprendre une fonction qui associe des entrées (features) à des sorties (labels) à partir d'exemples annotés. On distingue la classification (prédire une classe) et la régression (prédire une valeur continue).
#Prérequis et objectifs
Prérequis: page « Pipeline et features » (split, scaling, encodage), algèbre linéaire de base (produit scalaire, hyperplan), page d'index du module (rôles de train/val/test).
Objectifs d'apprentissage:
- choisir un type de tâche (classification binaire, multi-classe, régression, multi-label) selon la nature de la sortie;
- décrire le mécanisme et les compromis des algorithmes classiques: régression logistique, arbres, forêts, gradient boosting, SVM;
- appliquer la validation croisée pour estimer la généralisation et régler les hyperparamètres;
- reconnaître le sur-apprentissage sur l'écart train/validation et le traiter (régularisation, profondeur limitée).
#Types de problèmes
Le critère de choix est la nature de la sortie: deux catégories (binaire), plusieurs catégories exclusives (multi-classe, une seule vraie par exemple), un nombre réel (régression), ou plusieurs étiquettes simultanées (multi-label: un article peut être à la fois « politique » et « économie »). Confondre multi-classe et multi-label conduit à un modèle faux même avec de bonnes données.
#Algorithmes classiques
Les algorithmes de base à maîtriser avant de passer aux réseaux de neurones:
Régression logistique: modèle linéaire pour la classification, interprétable via les coefficients. Rapide à entraîner, sert souvent de baseline. Sortie probabiliste calibrable.
Arbres de décision: partitionnent l'espace des features par seuils successifs. Interprétables mais sensibles au sur-apprentissage. Hyperparamètres clés: profondeur maximale, nombre minimum d'exemples par feuille.
Random Forest: ensemble d'arbres entraînés sur des sous-échantillons bootstrap, agrégés par vote. Réduit la variance, très robuste, peu de tuning nécessaire.
Gradient Boosting (XGBoost/LightGBM): arbres séquentiels corrigeant les erreurs précédentes. Souvent les meilleurs résultats sur données tabulaires, au prix d'un apprentissage séquentiel moins parallélisable.
SVM: trouve l'hyperplan de marge maximale. Efficace en haute dimension, mais coûteux sur grands jeux de données.
#Exemple: comparaison de modèles
Exercice observable: ajoutez 'Arbre libre': DecisionTreeClassifier() (profondeur illimitée) au dictionnaire, et comparez son score CV à celui de l'arbre de profondeur 5. Puis, pour voir le sur-apprentissage directement, évaluez chaque modèle sur ses propres données d'entraînement via cross_val_score(..., return_train_score=True) et lisez mean_train_score contre mean_test_score. Résultat attendu: l'arbre libre affiche un train score proche de 1.0 mais un test score inférieur à celui de l'arbre limité: c'est la signature observable du sur-apprentissage, et la raison d'être des hyperparamètres de profondeur.
#Régularisation
La régularisation pénalise les modèles trop complexes pour éviter le sur-apprentissage:
L1 (Lasso): pousse certains coefficients à zéro, donc sélectionne des features.
L2 (Ridge): réduit la magnitude de tous les coefficients, donc produit un modèle plus lisse.
Elastic Net: combine L1 et L2.
Observation attendue: le L1 laisse nettement moins de coefficients non-nuls que le L2 (souvent de l'ordre de 5 à 15 contre 50), avec une accuracy comparable. C'est la sélection de variables en action: sur 50 features dont 5 informatives, le Lasso élimine le bruit. La page « Régularisation et sélection » développe le lien avec le compromis biais-variance.
#Validation croisée
La cross-validation estime la performance de généralisation en répétant l'entraînement sur différents splits:
1from sklearn.model_selection import cross_val_score, StratifiedKFold2 3cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)4scores = cross_val_score(model, X, y, cv=cv, scoring='f1')5print(f"F1 moyen: {scores.mean():.3f} ± {scores.std():.3f}")L'écart-type entre folds est une information en soi: un modèle à 0.80 ± 0.02 est plus prévisible qu'un modèle à 0.82 ± 0.08, surtout si les folds sont stratifiés et donc comparables.