Lissage par moindres carrés

Objectifs d'apprentissage

À la fin de cette leçon, vous serez en mesure de :

  • Distinguer interpolation (passage exact) et lissage (ajustement)
  • Formuler et résoudre un problème de régression linéaire
  • Établir les équations normales pour les moindres carrés
  • Étendre la méthode aux polynômes de degré supérieur
  • Appliquer la méthode à des modèles non linéaires par linéarisation

Prérequis

  • Systèmes linéaires surdéterminés (Chapitre 3)
  • Résolution de systèmes par élimination
  • Notion de dérivée partielle

Interpolation vs lissage

Le problème de l'interpolation

Dans les leçons précédentes, nous avons cherché un polynôme passant exactement par tous les points de données. Mais cette approche pose des problèmes :

  1. Données bruitées : les mesures expérimentales contiennent des erreurs. Forcer le passage par des points erronés propage ces erreurs.

  2. Trop de données : avec beaucoup de points, le polynôme de degré élevé oscille dangereusement.

L'approche du lissage

Le lissage cherche une courbe simple (par exemple une droite) qui s'approche au mieux des données, sans nécessairement passer par chaque point.

💡

Philosophie des moindres carrés

On accepte de petites erreurs en chaque point pour obtenir une courbe globalement plus représentative de la tendance sous-jacente.


Principe des moindres carrés

Formulation

Soit NN points de données (ti,yi)(t_i, y_i). On cherche une fonction f(t)f(t) qui minimise la somme des carrés des erreurs (résidus) :

R2=i=1Nei2=i=1N[yif(ti)]2R^2 = \sum_{i=1}^{N} e_i^2 = \sum_{i=1}^{N} [y_i - f(t_i)]^2

Pourquoi les carrés ?

  • Les erreurs positives et négatives ne se compensent pas
  • Les grandes erreurs sont pénalisées davantage
  • La fonction à minimiser est différentiable (contrairement à la valeur absolue)
  • La solution possède une forme analytique simple

Régression linéaire

Le modèle

On cherche la droite y=mt+by = mt + b (pente mm, ordonnée à l'origine bb) qui minimise :

R2(m,b)=i=1N(yimtib)2R^2(m, b) = \sum_{i=1}^{N} (y_i - mt_i - b)^2

Conditions d'optimalité

R2(m,b)R^2(m, b) est une somme de carrés, donc une fonction convexe (paraboloïde orienté vers le haut). Elle admet un unique minimum global, et aucun maximum. Il suffit d'annuler les dérivées partielles pour le trouver :

R2b=2i=1N(yimtib)=0\frac{\partial R^2}{\partial b} = -2 \sum_{i=1}^{N} (y_i - mt_i - b) = 0
R2m=2i=1Nti(yimtib)=0\frac{\partial R^2}{\partial m} = -2 \sum_{i=1}^{N} t_i(y_i - mt_i - b) = 0

Développement vers les équations normales

Développons la première équation. On divise par 2-2 et on distribue la somme :

i=1Nyimi=1Ntii=1Nb=0\sum_{i=1}^{N} y_i - m\sum_{i=1}^{N} t_i - \sum_{i=1}^{N} b = 0

Comme mm et bb sont des constantes (ne dépendent pas de ii) :

yimtiNb=0Nb+mti=yi\sum y_i - m\sum t_i - Nb = 0 \quad \Longrightarrow \quad Nb + m\sum t_i = \sum y_i

De même pour la seconde équation (diviser par 2-2, distribuer) :

tiyimti2bti=0bti+mti2=tiyi\sum t_i y_i - m\sum t_i^2 - b\sum t_i = 0 \quad \Longrightarrow \quad b\sum t_i + m\sum t_i^2 = \sum t_i y_i

Les équations normales

On obtient le système des équations normales :

{Nb+mti=yibti+mti2=tiyi\begin{cases} Nb + m\sum t_i = \sum y_i \\ b\sum t_i + m\sum t_i^2 = \sum t_i y_i \end{cases}

Sous forme matricielle :

(Ntititi2)(bm)=(yitiyi)\begin{pmatrix} N & \sum t_i \\ \sum t_i & \sum t_i^2 \end{pmatrix} \begin{pmatrix} b \\ m \end{pmatrix} = \begin{pmatrix} \sum y_i \\ \sum t_i y_i \end{pmatrix}
💡

Pourquoi « normales » ?

Le nom « équations normales » vient de la géométrie : le vecteur résidu yAx\mathbf{y} - A\mathbf{x} est perpendiculaire (normal) à l'espace des colonnes de AA. C'est la projection orthogonale.


Exemple : résistance vs température

Données expérimentales

On mesure la résistance électrique d'un matériau à différentes températures :

iTᵢ (°C)Rᵢ (ohms)
120.5765
232.7826
351.0873
473.2942
595.71032

Calculs préliminaires

SommeValeur
Ti\sum T_i273.1
Ri\sum R_i4438
Ti2\sum T_i^218607.27
TiRi\sum T_i R_i254932.5

Système à résoudre

On cherche R=mT+bR = mT + b. Le système normal est :

(5273.1273.118607.27)(bm)=(4438254932.5)\begin{pmatrix} 5 & 273.1 \\ 273.1 & 18607.27 \end{pmatrix} \begin{pmatrix} b \\ m \end{pmatrix} = \begin{pmatrix} 4438 \\ 254932.5 \end{pmatrix}

Solution

On résout le système 2×2. De la première équation, on isole bb :

b=RimTiNb = \frac{\sum R_i - m\sum T_i}{N}

On substitue dans la seconde équation et on résout pour mm :

m=NTiRiTiRiNTi2(Ti)2m = \frac{N \sum T_i R_i - \sum T_i \sum R_i}{N \sum T_i^2 - (\sum T_i)^2}

Application numérique pour mm (la pente) :

Numeˊrateur=5×254932.5273.1×4438=1274662.51212017.8=62644.7\text{Numérateur} = 5 \times 254932.5 - 273.1 \times 4438 = 1274662.5 - 1212017.8 = 62644.7
Deˊnominateur=5×18607.27(273.1)2=93036.3574583.61=18452.74\text{Dénominateur} = 5 \times 18607.27 - (273.1)^2 = 93036.35 - 74583.61 = 18452.74
m=62644.718452.74=3.395m = \frac{62644.7}{18452.74} = 3.395

Puis bb (l'ordonnée à l'origine) :

b=44383.395×273.15=4438927.25=702.2b = \frac{4438 - 3.395 \times 273.1}{5} = \frac{4438 - 927.2}{5} = 702.2

Résultat

R=3.395T+702.2\boxed{R = 3.395 \cdot T + 702.2}

La résistance augmente d'environ 3.4 ohms par degré Celsius.


Formulation matricielle générale

Lien avec les systèmes surdéterminés

Le problème de régression peut s'écrire comme un système surdéterminé AcyA \mathbf{c} \approx \mathbf{y} :

A=(1t11t21tN),c=(bm),y=(y1y2yN)A = \begin{pmatrix} 1 & t_1 \\ 1 & t_2 \\ \vdots & \vdots \\ 1 & t_N \end{pmatrix}, \quad \mathbf{c} = \begin{pmatrix} b \\ m \end{pmatrix}, \quad \mathbf{y} = \begin{pmatrix} y_1 \\ y_2 \\ \vdots \\ y_N \end{pmatrix}

Ce système a NN équations et 2 inconnues. Si N>2N > 2, il est surdéterminé (pas de solution exacte en général).

Équations normales

La solution aux moindres carrés satisfait :

ATAc=ATyA^T A \, \mathbf{c} = A^T \mathbf{y}

Vérifions que c'est exactement le même système que les équations normales trouvées plus haut. Calculons ATAA^T A et ATyA^T \mathbf{y} :

ATA=(111t1t2tN)(1t11t21tN)=(Ntititi2)A^T A = \begin{pmatrix} 1 & 1 & \cdots & 1 \\ t_1 & t_2 & \cdots & t_N \end{pmatrix} \begin{pmatrix} 1 & t_1 \\ 1 & t_2 \\ \vdots & \vdots \\ 1 & t_N \end{pmatrix} = \begin{pmatrix} N & \sum t_i \\ \sum t_i & \sum t_i^2 \end{pmatrix}
ATy=(111t1t2tN)(y1y2yN)=(yitiyi)A^T \mathbf{y} = \begin{pmatrix} 1 & 1 & \cdots & 1 \\ t_1 & t_2 & \cdots & t_N \end{pmatrix} \begin{pmatrix} y_1 \\ y_2 \\ \vdots \\ y_N \end{pmatrix} = \begin{pmatrix} \sum y_i \\ \sum t_i y_i \end{pmatrix}

On retrouve bien le système avec les sommes de la section précédente. La formulation matricielle ATAc=ATyA^T A \, \mathbf{c} = A^T \mathbf{y} est simplement une écriture compacte des mêmes équations.

⚠️

Attention

En pratique, on ne calcule jamais (ATA)1(A^T A)^{-1} explicitement. On résout le système ATAc=ATyA^T A \, \mathbf{c} = A^T \mathbf{y} par factorisation (LU ou Cholesky).


Extension aux polynômes de degré n

Modèle polynomial

On cherche y=a0+a1t+a2t2++antny = a_0 + a_1 t + a_2 t^2 + \cdots + a_n t^n qui minimise :

R2=i=1N(yik=0naktik)2R^2 = \sum_{i=1}^{N} \left(y_i - \sum_{k=0}^{n} a_k t_i^k\right)^2

Matrice de design

A=(1t1t12t1n1t2t22t2n1tNtN2tNn)A = \begin{pmatrix} 1 & t_1 & t_1^2 & \cdots & t_1^n \\ 1 & t_2 & t_2^2 & \cdots & t_2^n \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 1 & t_N & t_N^2 & \cdots & t_N^n \end{pmatrix}

Système normal

ATAa=ATyA^T A \cdot \mathbf{a} = A^T \mathbf{y}

a=(a0,a1,,an)T\mathbf{a} = (a_0, a_1, \ldots, a_n)^T.


Régression non linéaire par linéarisation

Motivation

Certains phénomènes suivent des lois non linéaires :

  • Décroissance exponentielle : y=aebxy = ae^{bx}
  • Loi de puissance : y=axby = ax^b

Exemple : modèle exponentiel

Données :

xy
1.02.0
2.07.2
4.0500.1

Modèle : y=aebxy = ae^{bx}

Linéarisation : En prenant le logarithme :

ln(y)=ln(a)+bx=A+bx\ln(y) = \ln(a) + bx = A + bx

A=ln(a)A = \ln(a).

Transformation des données :

xz = ln(y)
1.00.693
2.01.974
4.06.215

Régression linéaire sur (x, z) :

(37721)(Ab)=(8.88229.5)\begin{pmatrix} 3 & 7 \\ 7 & 21 \end{pmatrix} \begin{pmatrix} A \\ b \end{pmatrix} = \begin{pmatrix} 8.882 \\ 29.5 \end{pmatrix}

Solution : b=1.88b = 1.88, A=1.43A = -1.43

Donc : a=eA=e1.430.24a = e^A = e^{-1.43} \approx 0.24

Modèle final :

y=0.24e1.88x\boxed{y = 0.24 \cdot e^{1.88x}}

Qualité de l'ajustement

Coefficient de détermination R²

Le coefficient R2R^2 mesure la qualité de l'ajustement :

R2=1(yiy^i)2(yiyˉ)2R^2 = 1 - \frac{\sum(y_i - \hat{y}_i)^2}{\sum(y_i - \bar{y})^2}

y^i=f(ti)\hat{y}_i = f(t_i) est la valeur prédite et yˉ\bar{y} la moyenne des yiy_i.

  • R2=1R^2 = 1 : ajustement parfait
  • R2=0R^2 = 0 : le modèle n'explique rien (pas mieux qu'une constante)
  • R20.9R^2 \approx 0.9 ou plus : bon ajustement

Erreur standard

σ=(yiy^i)2Nn1\sigma = \sqrt{\frac{\sum(y_i - \hat{y}_i)^2}{N - n - 1}}

NN est le nombre de points et nn le degré du polynôme.


Autres méthodes de lissage

Norme R∞ (minimax)

Minimiser l'erreur maximale :

R=maxiyif(ti)R_\infty = \max_i |y_i - f(t_i)|

Plus robuste aux outliers, mais plus difficile à résoudre.

Norme R₁

Minimiser la somme des valeurs absolues :

R1=iyif(ti)R_1 = \sum_i |y_i - f(t_i)|

Plus robuste aux outliers que R², mais pas de solution analytique simple.


Algorithme Python

moindres_carres.pypython
import numpy as np

def regression_lineaire(t, y):
  """
  Régression linéaire : y = m*t + b

  Retourne:
      m, b : pente et ordonnée à l'origine
      r2 : coefficient de détermination
  """
  N = len(t)
  sum_t = np.sum(t)
  sum_y = np.sum(y)
  sum_t2 = np.sum(t ** 2)
  sum_ty = np.sum(t * y)

  # Résoudre le système normal
  denom = N * sum_t2 - sum_t ** 2
  m = (N * sum_ty - sum_t * sum_y) / denom
  b = (sum_y - m * sum_t) / N

  # Coefficient R²
  y_pred = m * t + b
  ss_res = np.sum((y - y_pred) ** 2)
  ss_tot = np.sum((y - np.mean(y)) ** 2)
  r2 = 1 - ss_res / ss_tot

  return m, b, r2

def regression_polynomiale(t, y, degre):
  """
  Régression polynomiale : y = a_0 + a_1*t + ... + a_n*t^n

  Retourne:
      coeffs : coefficients [a_0, a_1, ..., a_n]
      r2 : coefficient de détermination
  """
  # Construire la matrice de design
  A = np.vander(t, degre + 1, increasing=True)

  # Équations normales
  ATA = A.T @ A
  ATy = A.T @ y

  # Résoudre
  coeffs = np.linalg.solve(ATA, ATy)

  # Coefficient R²
  y_pred = A @ coeffs
  ss_res = np.sum((y - y_pred) ** 2)
  ss_tot = np.sum((y - np.mean(y)) ** 2)
  r2 = 1 - ss_res / ss_tot

  return coeffs, r2

def regression_exponentielle(x, y):
  """
  Régression exponentielle : y = a * exp(b*x)
  par linéarisation.

  Retourne:
      a, b : coefficients
  """
  # Linéarisation : ln(y) = ln(a) + b*x  =>  z = b*x + ln(a)
  z = np.log(y)
  pente, ordonnee, _ = regression_lineaire(x, z)
  a = np.exp(ordonnee)
  b = pente

  return a, b

# Exemple : résistance vs température
T = np.array([20.5, 32.7, 51.0, 73.2, 95.7])
R = np.array([765, 826, 873, 942, 1032])

pente, ordonnee, r2 = regression_lineaire(T, R)
print(f"Régression linéaire : R = {pente:.3f} * T + {ordonnee:.1f}")
print(f"R² = {r2:.4f}")

# Régression polynomiale de degré 2
coeffs, r2_poly = regression_polynomiale(T, R, 2)
print(f"\nRégression quadratique : R = {coeffs[0]:.1f} + {coeffs[1]:.3f}*T + {coeffs[2]:.5f}*T²")
print(f"R² = {r2_poly:.4f}")

# Exemple exponentiel
x_exp = np.array([1.0, 2.0, 4.0])
y_exp = np.array([2.0, 7.2, 500.1])

a_exp, b_exp = regression_exponentielle(x_exp, y_exp)
print(f"\nRégression exponentielle : y = {a_exp:.2f} * exp({b_exp:.2f} * x)")

Résumé

ConceptFormule / Description
Critère des moindres carrésmin(yif(ti))2\min \sum(y_i - f(t_i))^2
Équations normalesATAc=ATyA^T A \, \mathbf{c} = A^T \mathbf{y}
Régression linéairey=mt+by = mt + b
Régression polynomialey=a0+a1t++antny = a_0 + a_1 t + \cdots + a_n t^n
Linéarisationy=aebxlny=lna+bxy = ae^{bx} \Rightarrow \ln y = \ln a + bx
Qualité : R²R2=1SSresSStotR^2 = 1 - \frac{SS_{res}}{SS_{tot}}

Conclusion du chapitre

Ce chapitre a couvert les principales méthodes d'interpolation et de lissage polynomiales :

  1. Interpolation exacte : Lagrange, Newton-Gregory, différences divisées
  2. Instabilité : phénomène de Runge pour les polynômes de degré élevé
  3. Splines cubiques : polynômes par morceaux avec continuité C²
  4. Courbes paramétriques : Bézier et B-splines pour la conception
  5. Interpolation 2D : par étapes ou polynôme bidimensionnel
  6. Lissage : moindres carrés pour les données bruitées

Ces outils sont fondamentaux en analyse numérique et trouvent des applications dans tous les domaines de la science et de l'ingénierie.