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
| Mot | Ce que ça veut dire |
|---|---|
| Droite d’ajustement | la droite y = a fois x plus b qui colle aux points |
| Résidu | l’écart entre une valeur observée et la droite |
| Erreur quadratique moyenne | la moyenne des résidus élevés au carré |
| Moindres carrés | la méthode qui rend cette erreur minimale |
| Solution exacte | les 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 + 1 | Carré | Résidu droite y = 1,1x + 2 | Carré |
|---|---|---|---|---|
| (1, 3) | 3 - 2 = 1 | 1 | 3 - 3,1 = -0,1 | 0,01 |
| (2, 5) | 5 - 3 = 2 | 4 | 5 - 4,2 = 0,8 | 0,64 |
| (3, 4) | 4 - 4 = 0 | 0 | 4 - 5,3 = -1,3 | 1,69 |
| (4, 7) | 7 - 5 = 2 | 4 | 7 - 6,4 = 0,6 | 0,36 |
| Erreur moyenne | 9 divisé par 4 = 2,25 | 2,7 divisé par 4 = 0,675 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Comparer trois pentes par leur erreur
# 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
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
docker exec jupyter python3 ajuster.pyAffiché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
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
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.