Séance 2 : La régression linéaire et l'optimisation

Durée : 50 minutes

Objectifs de la séance

Plan de la séance

1. Partie Théorique (15–20 minutes)

Introduction à la régression linéaire

La régression linéaire est un modèle permettant de prédire une variable continue en établissant une relation linéaire entre les variables d’entrée et la variable cible. On modélise généralement par l’équation y = wx + b.

Fonction de coût et descente de gradient

La fonction de coût (souvent l’erreur quadratique moyenne, MSE) mesure l’écart entre les prédictions du modèle et les données réelles. La descente de gradient est une méthode itérative pour minimiser cette fonction en ajustant les paramètres w et b.

2. Partie Pratique (30–35 minutes)

Exercice : Implémentation d'une régression linéaire par descente de gradient

Objectif : Générer un jeu de données simulé, appliquer la descente de gradient pour ajuster un modèle de régression linéaire et visualiser le résultat.

Consignes :
  1. Générer un jeu de données aléatoire avec une relation linéaire bruitée.
  2. Ajouter une colonne de biais pour la constante.
  3. Initialiser aléatoirement les paramètres et effectuer plusieurs itérations de mise à jour à l'aide de la descente de gradient.
  4. Tracer la droite de régression obtenue sur un graphique.
Exemple de code Python :

import numpy as np
import matplotlib.pyplot as plt

# Génération d'un jeu de données simulé
np.random.seed(0)
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)

# Ajout de la colonne de biais
X_b = np.c_[np.ones((100, 1)), X]

# Paramètres de la descente de gradient
eta = 0.1            # Taux d'apprentissage
n_iterations = 1000  # Nombre d'itérations
m = 100              # Nombre d'exemples
theta = np.random.randn(2, 1)

for iteration in range(n_iterations):
    gradients = 2/m * X_b.T.dot(X_b.dot(theta) - y)
    theta = theta - eta * gradients

print("Paramètres trouvés (theta) :", theta)

# Visualisation
plt.plot(X, y, "b.")
X_new = np.array([[0], [2]])
X_new_b = np.c_[np.ones((2, 1)), X_new]
y_predict = X_new_b.dot(theta)
plt.plot(X_new, y_predict, "r-", linewidth=2)
plt.xlabel("x")
plt.ylabel("y")
plt.title("Régression linéaire par descente de gradient")
plt.show()
          

Propositions de Corrections et Commentaires

Afficher/Cacher les corrections

Ouvertures et Possibilités d’Application