Concepts d'IA en Python

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

Exécuter le code →
main.py
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.

  1. Modifiez les entrées ou les poids et prédisez la sortie avant d'exécuter.
  2. Affichez les valeurs intermédiaires pour suivre chaque étape du calcul.
  3. Résolvez les défis liés ci-dessous pour implémenter l'idée vous-même.
Exécuter dans l’IDE Python →

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.

Tous les défis