Skip to main content

Welcome to a Grasp lesson

Create a free account to keep studying and create your own study path.

Lesson 57

Regularization: Preventing Overfitting with Ridge and Lasso

Recommended resources

Bonjour ! Dans la leçon précédente, nous avons exploré la régression linéaire multiple, un outil puissant pour modéliser des relations complexes avec plusieurs variables. Cependant, à mesure que la complexité du modèle augmente (c'est-à-dire que nous ajoutons de plus en plus de caractéristiques), nous courons un risque majeur : le surapprentissage (overfitting). Un modèle en surapprentissage est excellent pour décrire les données sur lesquelles il a été entraîné, mais il échoue à généraliser et à faire des prédictions précises sur de nouvelles données.

Cette leçon aborde directement ce problème. Nous allons explorer les techniques de régularisation, des méthodes conçues pour créer des modèles plus simples et plus robustes. Spécifiquement, vous apprendrez à appliquer deux des techniques de régularisation les plus courantes et les plus importantes : la régression Ridge (L2) et la régression Lasso (L1). Comprendre ces méthodes est essentiel pour construire des modèles d'apprentissage automatique qui sont non seulement performants, mais aussi fiables dans des conditions réelles.

1. Le Problème : Quand la Complexité se Retourne Contre Nous

Vous vous souvenez du compromis biais-variance que nous avons abordé au début de ce module. C'est le concept central qui motive la régularisation.

  • Un modèle trop simple (comme essayer de modéliser une courbe complexe avec une ligne droite) a un biais élevé. Il ne capture pas la structure sous-jacente des données.
  • Un modèle trop complexe (comme un polynôme de haut degré qui passe par chaque point de données) a une variance élevée. Il s'adapte au bruit des données d'entraînement et ne généralise pas bien.
Cette courbe illustre le compromis biais-variance. À mesure que la complexité du modèle augmente, le biais diminue (le modèle s'adapte mieux aux données d'entraînement), mais la variance augmente (le modèle devient plus sensible au bruit). La régularisation nous aide à trouver le point de complexité optimale qui minimise l'erreur totale sur les données de test.

Lorsque nous utilisons une régression linéaire multiple avec de nombreuses caractéristiques, les coefficients du modèle peuvent devenir très grands pour compenser les petites fluctuations dans les données d'entraînement. C'est un signe classique de surapprentissage. Le modèle devient trop sensible à ses entrées.

La régularisation résout ce problème en ajoutant une "pénalité" à la fonction de coût du modèle. Cette pénalité est conçue pour décourager les coefficients de devenir trop grands. Essentiellement, nous disons au modèle : "Trouve les coefficients qui minimisent l'erreur, mais garde ces coefficients aussi petits que possible."

Lasso and Ridge Regression in Python Tutorial

Cet article de DataCamp introduit très bien le concept de régularisation comme solution au surapprentissage.

Lisez la première section, Regularization. Concentrez-vous sur la distinction entre surapprentissage (overfitting) et sous-apprentissage (underfitting), et sur l'idée principale que la régularisation réduit la magnitude des coefficients pour éviter le surapprentissage.


2. La Régression Ridge (Régularisation L2)

La régression Ridge est la première technique que nous allons voir. Elle modifie la fonction de coût de la régression linéaire en ajoutant un terme de pénalité qui est la somme des carrés de tous les coefficients.

La fonction de coût devient :

Où :

  • Le premier terme est la somme des carrés des résidus (RSS), que la régression linéaire standard essaie de minimiser.
  • Le second terme est la pénalité Ridge.
  • sont les coefficients du modèle.
  • (lambda) est un hyperparamètre qui contrôle la force de la pénalité. On l'appelle aussi alpha dans Scikit-learn.

Quand , la pénalité disparaît, et la régression Ridge est identique à une régression linéaire classique. Quand est très grand, le modèle est fortement pénalisé pour avoir des coefficients non nuls, ce qui les force à être très proches de zéro.

La vidéo suivante de StatQuest explique cela de manière incroyablement intuitive.

Regularization Part 1: Ridge (L2) Regression

Josh Starmer explique comment Ridge Regression combat le surapprentissage en introduisant un peu de biais pour réduire considérablement la variance.

Regardez l'introduction du problème pour comprendre pourquoi la régression linéaire standard peut échouer avec peu de données, menant au surapprentissage. Poursuivez avec l'explication de la fonction de coût de Ridge. C'est la partie la plus importante pour comprendre le mécanisme. Voyez l'effet sur les coefficients : la pénalité conduit à des pentes (coefficients) plus faibles, rendant le modèle moins sensible. Enfin, comprenez le rôle de l'hyperparamètre lambda (alpha) et comment on le choisit (via la validation croisée).

L'effet principal de Ridge est de réduire les coefficients des caractéristiques. Les coefficients des caractéristiques moins importantes seront proches de zéro, mais ils ne deviendront jamais exactement zéro. Ridge garde toutes les caractéristiques dans le modèle.


3. La Régression Lasso (Régularisation L1)

La régression Lasso (Least Absolute Shrinkage and Selection Operator) est très similaire à Ridge, mais avec une différence cruciale dans la pénalité.

La fonction de coût de Lasso est :

La seule différence est que la pénalité est basée sur la somme des valeurs absolues des coefficients, et non sur leurs carrés. Cette petite modification a une conséquence énorme.

Regularization Part 2: Lasso (L1) Regression

Cette vidéo fait suite à la précédente et explique la différence clé entre Ridge et Lasso.

Après la rapide révision de Ridge, portez attention à l'introduction de la pénalité Lasso. La partie la plus importante est la grande différence : Lasso peut réduire les coefficients de caractéristiques inutiles exactement à zéro.

La capacité de Lasso à annuler complètement les coefficients est extrêmement utile. Elle effectue une sélection automatique de caractéristiques (feature selection). Si vous avez des centaines de caractéristiques et que vous soupçonnez que beaucoup d'entre elles sont inutiles, Lasso peut simplifier votre modèle en les éliminant pour vous.


4. L'Intuition Géométrique : Pourquoi Lasso Annule-t-il les Coefficients ?

Pour comprendre pourquoi Lasso annule les coefficients et pas Ridge, il faut regarder le problème d'un point de vue géométrique. L'optimisation du modèle consiste à trouver l'endroit où les courbes de niveau de la fonction d'erreur (les ellipses dans l'image ci-dessous) touchent pour la première fois la "zone de contrainte" définie par la pénalité.

Cette image montre les "zones de contrainte" pour Lasso (à gauche) et Ridge (à droite). Les ellipses rouges sont les courbes de niveau de la fonction de coût. La solution se trouve au point de tangence entre une ellipse et la zone de contrainte (bleue).
  • Pour Lasso (L1), la zone de contrainte est un diamant. Les ellipses ont de fortes chances de toucher l'un des "coins" du diamant, où l'un des coefficients ( ou ) est exactement zéro.
  • Pour Ridge (L2), la zone de contrainte est un cercle. La tangence se produit presque toujours en un point où aucun des coefficients n'est nul.

Cet article explique cette intuition visuelle de manière très détaillée.

3. The difference between L1 and L2 regularization

Cet article d'explained.ai fournit l'une des meilleures explications visuelles sur le fonctionnement de la régularisation L1 et L2.

Concentrez-vous sur la section Why is L1 more likely to zero coefficients than L2?. L'explication autour des Figure 3.2 et Figure 3.3 est la clé pour vraiment comprendre pourquoi la forme du diamant (Lasso) favorise les solutions où des coefficients sont nuls, contrairement au cercle (Ridge).


5. Mise en Pratique avec Scikit-learn

Maintenant, mettons ces concepts en pratique. L'implémentation de Ridge et Lasso avec Scikit-learn est très simple et suit le même schéma que LinearRegression.

L'article de DataCamp que vous avez commencé à lire contient un excellent guide pratique. Nous allons l'utiliser pour voir le code en action.

Étape cruciale : La mise à l'échelle des données
Étant donné que les pénalités de régularisation sont basées sur la magnitude des coefficients, il est impératif que toutes vos caractéristiques soient sur une échelle comparable. Si une caractéristique a une échelle de 0 à 100 000 (par exemple, le revenu) et une autre de 0 à 10 (par exemple, des années d'expérience), le modèle pénalisera injustement le coefficient de la première caractéristique. C'est pourquoi on applique systématiquement un StandardScaler (que vous avez vu dans une leçon précédente) avant d'utiliser Ridge ou Lasso.

Lasso and Ridge Regression in Python Tutorial

Ce tutoriel montre comment implémenter et comparer les modèles de régularisation en Python.

Parcourez les sections de code suivantes. Ne vous souciez pas de tout exécuter, mais concentrez-vous sur la structure du code et la logique. Dans la section "Python Implementation", observez le code dans le bloc qui prépare les données. Notez bien l'utilisation du StandardScaler. Juste après, dans la section "Linear and Ridge Regression Models", étudiez le bloc de code qui instancie et entraîne les modèles LinearRegression et Ridge. Voyez comme c'est simple : on importe Ridge, on l'instancie avec une valeur alpha, et on l'entraîne avec .fit(). Faites de même pour la section "Lasso Regression", en examinant le bloc qui entraîne le modèle Lasso. Enfin, lisez la section Selecting Optimal Alpha Values. C'est une partie très importante. Choisir la bonne valeur pour alpha est crucial. Au lieu de le faire manuellement, Scikit-learn propose RidgeCV et LassoCV, qui testent automatiquement plusieurs valeurs d'alpha en utilisant la validation croisée pour trouver la meilleure. C'est la méthode à privilégier en pratique.

Voici un résumé du flux de travail complet :

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import RidgeCV, LassoCV




# 1. Charger et préparer les données
# df = ...
# X = df.drop('target', axis=1)
# y = df['target']
# X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)




# 2. Mettre les données à l'échelle
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)




# 3. Entraîner le modèle Ridge avec validation croisée pour trouver le meilleur alpha
# On fournit une liste d'alphas à tester
alphas = [0.1, 1, 10, 100]
ridge_cv = RidgeCV(alphas=alphas, store_cv_values=True)
ridge_cv.fit(X_train_scaled, y_train)




# 4. Entraîner le modèle Lasso avec validation croisée
lasso_cv = LassoCV(alphas=alphas, cv=5, random_state=42) # cv=5 signifie validation croisée à 5 plis
lasso_cv.fit(X_train_scaled, y_train)




# 5. Inspecter les résultats
print("Meilleur alpha pour Ridge:", ridge_cv.alpha_)
print("Coefficients Ridge:", ridge_cv.coef_)

print("\nMeilleur alpha pour Lasso:", lasso_cv.alpha_)
print("Coefficients Lasso:", lasso_cv.coef_)



# Observez combien de coefficients Lasso sont à zéro !

Conclusion

Aujourd'hui, vous avez ajouté deux outils fondamentaux à votre arsenal d'apprentissage automatique. La régularisation n'est pas juste une technique avancée ; c'est une pratique standard et essentielle pour construire des modèles de régression robustes, en particulier lorsque vous traitez des ensembles de données avec de nombreuses caractéristiques.

Points clés à retenir :

  • La régularisation combat le surapprentissage en ajoutant une pénalité à la fonction de coût pour décourager les grands coefficients.
  • La régression Ridge (L2) utilise une pénalité sur le carré des coefficients (). Elle réduit la taille des coefficients mais les garde tous non nuls. Elle est particulièrement efficace quand de nombreuses caractéristiques sont corrélées (multicolinéarité).
  • La régression Lasso (L1) utilise une pénalité sur la valeur absolue des coefficients (). Elle peut réduire certains coefficients jusqu'à zéro, effectuant ainsi une sélection automatique de caractéristiques.
  • La force de la pénalité est contrôlée par l'hyperparamètre alpha (), qui doit être optimisé, de préférence en utilisant la validation croisée avec RidgeCV et LassoCV.
  • N'oubliez jamais de mettre vos données à l'échelle (StandardScaler) avant d'appliquer la régularisation.

Jusqu'à présent, nous nous sommes concentrés sur la prédiction de valeurs continues (problèmes de régression). Dans la prochaine leçon, nous allons aborder un autre grand type de problème en apprentissage supervisé : la classification, où l'objectif est de prédire une catégorie (par exemple, "oui/non", "chat/chien"). Nous commencerons par l'un des modèles de classification les plus importants : la régression logistique.