Accéder au contenu principal

Tutoriel sur l’équation normale pour la régression linéaire

Découvrez ce qu’est l’équation normale et comment l’utiliser pour créer des modèles d’apprentissage automatique.
Actualisé 19 sept. 2026  · 8 min lire

Explorer avec l’IA

ChatGPTClaudePerplexity

La plupart des problèmes peuvent se résoudre de plusieurs façons. Par exemple, pour traverser une pièce, vous pouvez longer les murs jusqu’au côté opposé, ou couper tout droit.

L’équation normale illustre ce principe : c’est une autre manière de résoudre un même problème. Quel problème, au juste ? Nous le verrons dans la suite de l’article. Pour l’instant, retenez surtout que c’est une approche efficace qui peut vous faire gagner beaucoup de temps pour implémenter une régression linéaire dans certaines conditions.

Allons plus loin…

Qu’est-ce que l’équation normale ?

L’équation normale est une solution en forme fermée permettant de trouver la valeur de θ qui minimise la fonction de coût pour une régression linéaire aux moindres carrés ordinaires. On peut aussi la décrire comme une approche analytique pour déterminer les coefficients qui minimisent la fonction de perte. Les deux formulations sont justes, mais que signifient-elles concrètement ?

La régression linéaire produit une prédiction, y_hat, en calculant la somme pondérée des variables d’entrée, plus un terme de biais. Mathématiquement, on peut l’écrire ainsi :

Où θ représente les paramètres et n le nombre de caractéristiques.

En substance, l’équation ci-dessus réalise un produit scalaire entre θ et x, puis additionne. On peut donc la noter de façon plus concise sous forme vectorisée :

h(θ) est la fonction d’hypothèse.

À partir de cette fonction cible approximative, nous pouvons faire des prédictions. Pour évaluer la qualité de l’apprentissage, il est essentiel de mesurer les performances du modèle sur les données d’entraînement. À cette fin, nous calculons une fonction de perte. L’objectif de l’entraînement est de trouver les valeurs de θ qui minimisent cette fonction.

Voici une écriture mathématique de la fonction de perte :

Dans l’équation ci-dessus, θ est un vecteur de dimension n + 1, et notre fonction de perte dépend de ce vecteur. Par conséquent, on calcule la dérivée partielle de la fonction J par rapport à chaque paramètre θ_j, et on les met toutes à zéro. En résolvant ainsi pour θ_0 jusqu’à θ_n, on obtient les valeurs de θ qui minimisent la perte.

Suivre pas à pas cette dérivation pour obtenir θ_0 à θ_n est toutefois très fastidieux. Il existe une méthode plus rapide.

Voici la formule de l’équation normale :

Où :

θ → les paramètres qui minimisent la fonction de perte  X → les valeurs des variables d’entrée pour chaque observation  y → le vecteur des valeurs cibles pour chaque observation

Équation normale vs descente de gradient

Ces deux méthodes visent à trouver les paramètres θ qui minimisent la fonction de perte, mais leurs approches diffèrent fortement.

Comme nous avons déjà expliqué le fonctionnement de l’équation normale, évoquons brièvement la descente de gradient, puis voyons en quoi elles se distinguent.

Descente de gradient

La descente de gradient est l’un des algorithmes les plus utilisés en apprentissage automatique. Elle recherche itérativement les paramètres θ qui minimisent la fonction de perte.

On commence par évaluer la performance du modèle. Ensuite, on calcule la dérivée partielle de la fonction de perte pour obtenir la pente au point courant. Enfin, on effectue des pas proportionnels au gradient négatif afin de descendre vers le minimum de la fonction de perte en mettant à jour les paramètres — voir la formule ci-dessous.

Ce processus est répété jusqu’à convergence au minimum de la fonction de perte.

En quoi diffèrent-elles ?

La différence la plus visible est que l’équation normale est analytique. La descente de gradient est itérative : les paramètres sont mis à jour progressivement jusqu’à convergence. Autre différence implicite : la descente de gradient impose de définir un taux d’apprentissage qui contrôle la taille des pas vers le minimum. L’équation normale n’en nécessite pas, puisqu’il n’y a pas d’itérations : on obtient directement le résultat.

De plus, l’échelonnage des variables n’est pas requis avec l’équation normale. On pratique généralement la mise à l’échelle pour que les caractéristiques aient des ordres de grandeur comparables, car la descente de gradient est sensible aux différences d’échelle. Ne pas normaliser ses variables avec la descente de gradient peut déformer les lignes de niveau de la fonction de perte, alors que l’équation normale n’a pas ce défaut.

Quand utiliser l’équation normale

Le meilleur moyen de savoir s’il faut préférer l’équation normale à la descente de gradient est d’en comprendre les limites.

Lorsque le nombre de variables explicatives est élevé, le calcul de l’équation normale devient très coûteux. En effet, pour résoudre θ, il faut calculer (X’ X)^-1. Le produit X’ X donne une matrice n × n et, dans la plupart des implémentations, l’inversion d’une matrice a une complexité qui croît approximativement au cube de sa dimension. L’opération d’inversion est donc en O(n^3), ce qui rend l’équation normale très lente quand n est très grand — en savoir plus sur la complexité temporelle.

Ainsi, il est préférable d’utiliser la descente de gradient quand le jeu de données comporte beaucoup de variables. Andrew Ng, expert reconnu en apprentissage automatique et en IA, recommande d’envisager la descente de gradient lorsque le nombre de caractéristiques n dépasse 10 000. En deçà (10 000 ou moins), une approche analytique comme l’équation normale peut être plus indiquée, notamment parce que vous n’avez pas de taux d’apprentissage à choisir, soit un hyperparamètre de moins à ajuster. Cela dit, en pratique, des langages comme R ou Python utilisent plutôt la décomposition QR pour estimer les coefficients d’une régression linéaire aux moindres carrés, car elle est plus stable numériquement et plus efficace que l’équation normale. 

Implémenter l’équation normale en Python, depuis zéro

Générons un problème de régression pour tester l’équation :

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_regression

# Générer un problème de régression
X, y = make_regression(
    n_samples=100,
    n_features=2,
    n_informative=2,
    noise = 10,
    random_state=25
    )

# Visualiser la caractéristique d'indice 1 vs la cible
plt.subplots(figsize=(8, 5))
plt.scatter(X[:, 1], y, marker='o')
plt.xlabel("Caractéristique (indice 1)")
plt.ylabel("Cible")
plt.show()

Implémentons maintenant l’équation normale :

# ajouter x0 = 1 à chaque observation
X_b = np.concatenate([np.ones((len(X), 1)), X], axis=1)
# calculer l'équation normale
theta_best = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)
# meilleures valeurs pour theta
intercept, *coef = theta_best
print(f"Intercept: {intercept}\n\
Coefficients: {coef}")

Intercept: 0.35921242677977794
Coefficients: [6.129199175400593, 96.44309685893134]

Mettons le modèle à l’épreuve avec une prédiction :

# créer un nouvel échantillon
new_sample = np.array([[-2, 0.25]])
# ajouter un terme de biais à l'observation
new_sample_b = np.concatenate([np.ones((len(new_sample), 1)), new_sample], axis=1)
# prédire la valeur du nouvel échantillon
new_sample_pred = new_sample_b.dot(theta_best)
print(f"Prediction: {new_sample_pred}")
Prediction: [12.21158829]

Quand vous implémentez un algorithme d’apprentissage automatique depuis zéro, il est utile de valider votre solution : Scikit-learn est l’une des bibliothèques les plus populaires en Python. Elle propose de nombreuses implémentations, dont la régression linéaire, que nous allons utiliser pour valider notre équation normale.

from sklearn.linear_model import LinearRegression

lr = LinearRegression()
lr.fit(X, y)

print(f"Intercept: {lr.intercept_}\n\
Coefficients: {lr.coef_}")
print(f"Prediction: {lr.predict(new_sample)}")

Intercept: 0.3592124267797807
Coefficients: [ 6.12919918 96.44309686]
Prediction: [12.21158829]

Les résultats sont quasiment identiques : notre solution est donc validée.

Foire aux questions (FAQ)

Qu’est-ce que l’équation normale en apprentissage automatique ?

L’équation normale est une approche analytique pour trouver la valeur de θ qui minimise la fonction de perte, sans avoir à itérer.

Quand utiliser l’équation normale plutôt que la descente de gradient ?

Il est préférable d’utiliser l’équation normale lorsque nous avons peu de variables explicatives. Son calcul devient coûteux en ressources lorsque le nombre de variables dans le jeu de données est élevé.

Peut-on utiliser l’équation normale pour la régression logistique ?

Malheureusement non. Il n’existe qu’un seul modèle conditionnel en théorie de la classification qui admet une solution en forme fermée : la régression linéaire.

Quelle est la différence entre l’équation normale et la descente de gradient ?

La différence la plus évidente entre l’équation normale et la descente de gradient est que l’équation normale adopte une approche analytique pour trouver le minimum de la fonction de perte, tandis que la descente de gradient procède par itérations. Autre différence : il n’y a pas de taux d’apprentissage à régler avec l’équation normale, puisque les paramètres θ sont trouvés en une seule étape.

Sujets
Apprentissage automatique
Science des données
Python