Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Régression linéaire par moindres carrés

Après cette leçon: Je peux ajuster une droite à des points en minimisant l’erreur quadratique moyenne.

Leçon de 65 min4 commandesLab JupyterLab de science des données : pandas, Matplotlib et scikit-learn dans le navigateur

Quelle droite colle aux points ?

La régression linéaire par moindres carrés cherche la droite qui passe au plus près d’un nuage de points. Elle donne une règle simple pour prévoir une valeur à partir d’une autre.

Un loueur de vélos veut prévoir ses locations d’après la température. Il lui faut la droite qui se trompe le moins, en moyenne.

À la fin de cette leçon

Remarque

Je peux ajuster une droite à des points en minimisant l’erreur quadratique moyenne.

Mots clés

MotCe que ça veut dire
Droite d’ajustementla droite y = a fois x plus b qui colle aux points
Résidul’écart entre une valeur observée et la droite
Erreur quadratique moyennela moyenne des résidus élevés au carré
Moindres carrésla méthode qui rend cette erreur minimale
Solution exacteles valeurs de a et b trouvées sans boucle de pas

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

L’erreur moyenne au carré mesure une droite

Pour chaque point, on calcule l’écart entre la valeur observée et celle de la droite : le résidu. On l’élève au carré, pour que les signes ne s’annulent pas et que les grands écarts pèsent plus.

La moyenne de ces carrés est l’erreur quadratique moyenne. Une droite est meilleure qu’une autre quand cette erreur est plus petite.

Exemple travaillé : deux droites pour quatre points

Point (x, y)Résidu droite y = x + 1CarréRésidu droite y = 1,1x + 2Carré
(1, 3)3 - 2 = 113 - 3,1 = -0,10,01
(2, 5)5 - 3 = 245 - 4,2 = 0,80,64
(3, 4)4 - 4 = 004 - 5,3 = -1,31,69
(4, 7)7 - 5 = 247 - 6,4 = 0,60,36
Erreur moyenne9 divisé par 4 = 2,252,7 divisé par 4 = 0,675

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Comparer trois pentes par leur erreur

Code: python
# Trois pentes essayées pour la droite y = a x, sur une petite série.
x = [1, 2, 3]
y = [2, 4, 7]
for a in [1, 2, 3]:
    total = 0
    for i in range(len(x)):
        total = total + (a * x[i] - y[i]) ** 2
    print("pente", a, ": erreur moyenne", round(total / len(x), 3))
# Essayez la pente 2.3 : l’erreur baisse-t-elle encore ?

La descente règle a et b

L’erreur dépend de deux réglages : la pente a et l’ordonnée b. C’est une fonction de deux variables, comme la colline de la leçon sur le gradient.

On part de a = 0 et b = 0. À chaque pas, on calcule les deux dérivées partielles de l’erreur, puis on retranche le taux fois chacune. C’est la même descente qu’avant.

Écrire la descente d’ajustement dans le labo

Commande
docker exec jupyter sh -c "printf 'x = [1, 2, 3, 4]\ny = [3, 5, 4, 7]\na = 0.0\nb = 0.0\nfor i in range(2000):\n    ga = 0.0\n    gb = 0.0\n    for j in range(4):\n        erreur = a * x[j] + b - y[j]\n        ga = ga + 2 * erreur * x[j] / 4\n        gb = gb + 2 * erreur / 4\n    a = a - 0.05 * ga\n    b = b - 0.05 * gb\nprint(round(a, 3), round(b, 3))\n' > ajuster.py"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Lancer 2000 pas de descente

Commande
docker exec jupyter python3 ajuster.py

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

NumPy donne la réponse exacte sans boucle

Pour une droite, les moindres carrés ont une solution exacte, que NumPy calcule avec polyfit. On peut donc contrôler la descente : les deux méthodes doivent s’accorder.

La descente reste utile : pour les modèles à des millions de réglages, il n’existe pas de formule aussi simple.

Comparer avec la solution exacte de NumPy

Commande
docker exec jupyter python3 -c "import numpy as np; print([round(float(v), 3) for v in np.polyfit([1, 2, 3, 4], [3, 5, 4, 7], 1)])"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Ajuster une droite aux 365 jours de locations

Commande
docker exec jupyter python3 -c "import csv, numpy as np; r = list(csv.DictReader(open('hires.csv'))); t = [float(x['temp_c']) for x in r]; h = [int(x['hires']) for x in r]; print([round(float(v), 2) for v in np.polyfit(t, h, 1)])"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Une erreur fréquente

Attention

Beaucoup pensent que la droite ajustée prouve que x cause y. Elle décrit seulement comment y varie avec x dans ces données. La pluie et le jour de la semaine jouent aussi sur les locations : la droite de la température seule les ignore.

Pour aller plus loin

Dans un carnet, ajustez une droite avec deux variables, la température et la pluie, grâce à LinearRegression de scikit-learn. Comparez la pente de la température avec 11,12.

Notez que la pente change quand la pluie entre dans le modèle : c’est le sujet de la lecture critique d’un modèle.

À propos de ce labo et de sa source: Lab JupyterLab de science des données : pandas, Matplotlib et scikit-learn dans le navigateur

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.