Régression linéaire et logistique en Python
La régression est la forme la plus simple d'apprentissage automatique. La régression linéaire prédit un nombre avec une droite ; la régression logistique fait passer cette droite dans une sigmoid pour prédire la probabilité d'une réponse oui/non.
Le concept en termes simples
La régression est la forme la plus simple d'apprentissage automatique. La régression linéaire prédit un nombre avec une droite ; la régression logistique fait passer cette droite dans une sigmoid pour prédire la probabilité d'une réponse oui/non.
Ajustez une droite par les moindres carrés, puis transformez un score en probabilité avec la régression logistique.
Idées clés
- La régression linéaire prédit des valeurs continues comme des prix ou des températures.
- La régression logistique prédit une probabilité pour deux classes.
- Les deux peuvent être entraînées par descente de gradient au lieu d'une formule fermée.
- Le perceptron est un classifieur proche qui ne met à jour ses poids que lorsqu'il se trompe.
Quand l’utiliser ?
- Comprendre ce qui se passe à l'intérieur des réseaux de neurones et des bibliothèques d'IA.
- Apprendre l'idée avant de l'implémenter dans les défis correspondants.
- Se préparer aux cours d'apprentissage automatique, aux entretiens et aux projets.
À vous de jouer
Cliquez sur le graphique de gauche pour ajouter des points et voir la meilleure droite se mettre à jour. À droite, changez w et b pour déplacer la frontière de décision.
Code d’exemple
import math
# Linear regression: find the line that best fits the points (least squares).
xs = [1, 2, 3, 4, 5]
ys = [2.1, 3.9, 6.2, 8.1, 9.8]
mean_x, mean_y = sum(xs) / len(xs), sum(ys) / len(ys)
slope = sum((x - mean_x) * (y - mean_y) for x, y in zip(xs, ys)) / sum((x - mean_x) ** 2 for x in xs)
intercept = mean_y - slope * mean_x
print(f"line: y = {slope:.2f}x + {intercept:.2f}")
print("predict x=6:", round(slope * 6 + intercept, 2))
# Logistic regression turns a score into a probability with the sigmoid.
def predict_pass(hours_studied, weight=1.5, bias=-4.0):
return 1 / (1 + math.exp(-(weight * hours_studied + bias)))
for hours in (1, 3, 5):
p = predict_pass(hours)
print(f"{hours} hours -> pass probability {p:.2f} -> {'pass' if p >= 0.5 else 'fail'}")
Résultat attendu
line: y = 1.96x + 0.14
predict x=6: 11.9
1 hours -> pass probability 0.08 -> fail
3 hours -> pass probability 0.62 -> pass
5 hours -> pass probability 0.97 -> pass
Fonctionnement
La formule des moindres carrés trouve la pente et l'ordonnée à l'origine qui rendent la distance au carré aux points la plus petite possible, ce qui donne y = 1.96x + 0.14. predict_pass() calcule un score à partir des heures d'étude et la sigmoid le transforme en probabilité ; 0.5 est le seuil entre échec et réussite.
Modifiez les valeurs et exécutez le programme avec le compilateur Python en ligne CodeUtility, sans installation locale.
Exercices pratiques
Modifiez les entrées et testez les cas limites avant d’utiliser des données plus volumineuses.
- Modifiez les entrées ou les poids et prédisez la sortie avant d'exécuter.
- Affichez les valeurs intermédiaires pour suivre chaque étape du calcul.
- Résolvez les défis liés ci-dessous pour implémenter l'idée vous-même.
S'entraîner avec un défi
Utilisez le contenu de cette leçon pour résoudre un vrai problème. Chaque défi s'exécute dans le navigateur, avec des tests instantanés et une revue par l'IA.
- Régression linéaire simple (moindres carrés) Trouvez la droite qui s'ajuste le mieux aux points de données avec les formules des moindres carrés. Moyen
- Régression linéaire par descente de gradient Apprenez la pente et l'ordonnée à l'origine d'une droite en descendant pas à pas l'erreur quadratique moyenne. Moyen
- Prédiction par régression logistique Classez des exemples en 0 ou 1 en passant une somme pondérée dans la sigmoïde et en la comparant à un seuil. Facile
- Algorithme d'apprentissage du perceptron Entraînez le perceptron d'origine, qui ne met à jour ses poids que lorsqu'il se trompe. Moyen