ML Atlas

Le machine learning en partant de zéro · Leçon 2.1 · 8 sur 33 leçons prêtes · 10 min

Classification : tracer une frontière

En bref

Un classifieur transforme des mesures en catégorie. La régression logistique donne une probabilité et une frontière, montrées sur deux espèces de manchots.

Échauffement Deux questions de leçons précédentes. Une minute, sans jamais bloquer la leçon.
De la leçon 1.6 : Descente de gradient : apprendre à petits pas Pourquoi utilise-t-on la descente de gradient pour les réseaux de neurones plutôt qu’une formule exacte ?

Voir la réponse

Bonne réponse : Aucune formule n’existe pour la plupart des modèles, mais le gradient se calcule

La descente de gradient n’a besoin que de la pente de la perte au point actuel, disponible même pour des modèles à plusieurs milliards de paramètres.

De la leçon 1.5 : Régression linéaire : ajuster une droite Pourquoi la régression linéaire élève-t-elle les résidus au carré au lieu de simplement les additionner ?

Voir la réponse

Bonne réponse : Pour que les écarts opposés ne s’annulent pas et que les gros écarts comptent plus

Les carrés sont toujours positifs et grandissent vite, donc la note tient compte de chaque écart et punit lourdement les grands.

En Antarctique, une biologiste mesure le bec et les nageoires d’un manchot. De quelle espèce s’agit-il ? C’est une autre sorte de question que « de combien la maladie va-t-elle progresser ? ». La réponse n’est pas un nombre sur une échelle, mais un choix entre des catégories. Les droites et les petits pas vers le bas des leçons précédentes peuvent-ils s’en charger ? Oui, avec une astuce bien trouvée.

Prédisez, puis vérifiez Le modèle distingue les manchots Adélie des manchots à jugulaire, et le seuil de décision par défaut est 0,5. Quel seuil du curseur donne la meilleure exactitude : 0,1 ; 0,3 ; 0,5 ou 0,9 ?
Quel est votre degré de certitude ?

Labo interactif

Ce labo interactif fonctionne dans un navigateur avec JavaScript activé. Le texte qui l’entoure décrit ce qu’il montre.

Voir la réponse

Bonne réponse : 0,3

Au seuil 0,3 l’exactitude est de 98,6 % (3 erreurs), à 0,5 seulement 96,8 % (7 erreurs), à 0,9 92,2 % et à 0,1 90,4 %. Le seuil 0,5 n’a rien de sacré : le meilleur seuil dépend de la proportion des classes et de l’erreur qui coûte le plus cher.

À vous de jouer

  • Regardez d’abord la frontière. Repérez les manchots situés du mauvais côté : ce sont les cas où le modèle se trompe même avec sa meilleure droite.
  • Déplacez le curseur du seuil de probabilité vers une extrémité et regardez la frontière glisser vers l’une des espèces. Remarquez que la droite se déplace mais garde sa direction.
  • Placez le seuil près d’un extrême et comptez comment les erreurs changent : une espèce n’est maintenant presque jamais manquée, au détriment de l’autre.
  • Trouvez des manchots proches de la frontière et comparez-les avec des manchots éloignés. Lesquels vérifieriez-vous à la main ?

L’idée en quelques mots

Voyons maintenant ce que vous venez de manipuler, en termes simples.

Prédire une catégorie s’appelle la classification. Dans cette leçon, nous utilisons le jeu de données Palmer Penguins : 344 manchots de trois espèces, venant d’îles proches de la station Palmer en Antarctique, chacun avec des mesures du bec, des nageoires et du corps. Pour que tout tienne sur un plan, nous prenons deux espèces et deux mesures, si bien que chaque manchot est un point sur un plan – une mesure à l’horizontale, l’autre à la verticale – dont on connaît l’espèce.

Un classifieur doit couper ce plan en deux régions : « espèce A ici, espèce B là ». La ligne entre les régions est la frontière de décision. La régression logistique, malgré son nom, est un modèle de classification, et sa frontière est une droite.

L’astuce, c’est que la régression logistique ne répond pas seulement « A » ou « B ». Elle répond par une probabilité : « ce manchot appartient à l’espèce B avec une probabilité de 0,9 ». Pensez à la météo. La prévisionniste annonce « 80 % de risque de pluie », et c’est vous qui décidez si cela suffit pour prendre un parapluie. Le modèle joue la prévisionniste ; le seuil est votre règle du parapluie.

Pourquoi ça marche

Le modèle calcule d’abord un score, exactement comme la régression linéaire : une somme pondérée des variables plus une ordonnée à l’origine, z = w₁x₁ + w₂x₂ + b. Ce score peut prendre n’importe quelle valeur, alors on le comprime dans l’intervalle de 0 à 1 grâce à la fonction sigmoïde :

p = 1 / (1 + e^(−z))

Un grand score positif donne une probabilité proche de 1, un grand score négatif une probabilité proche de 0, et un score d’exactement zéro donne 0,5. Les manchots loin de la frontière reçoivent des probabilités assurées ; ceux qui en sont proches reçoivent des probabilités voisines de un demi – le modèle hésite, et il le dit.

Les poids sont appris par descente de gradient, comme dans la leçon 4, mais avec une autre perte. Au lieu de l’erreur quadratique, le modèle utilise la perte logistique (log loss, aussi appelée entropie croisée). Elle punit à peine une réponse juste et assurée, et punit très durement une réponse fausse et assurée. Cela pousse le modèle à n’être sûr de lui que lorsque les données le justifient.

Enfin, le seuil transforme la probabilité en décision : probabilité au-dessus du seuil → espèce B, en dessous → espèce A. La valeur habituelle est 0,5, mais rien ne l’impose. Déplacer le seuil déplace la frontière. Comme la probabilité dépend de la somme pondérée, chaque seuil correspond à une droite de même direction, simplement décalée : l’avis du modèle sur la direction dans laquelle les espèces diffèrent reste le même, seule change votre exigence de certitude.

Erreur fréquente

Deux erreurs sont courantes. La première consiste à prendre 0,5 pour une loi. Le seuil est une décision sur les coûts, pas une partie du modèle ; en médecine, on peut accepter beaucoup de fausses alertes pour manquer moins de cancers. La seconde consiste à lire la probabilité comme une certitude. Une probabilité de 0,97 signifie que le modèle s’attend à se tromper dans environ trois cas semblables sur cent – et seulement si les nouvelles données ressemblent aux données d’entraînement. Un manchot d’une population que le modèle n’a jamais vue peut recevoir une réponse assurée et fausse.

Une frontière qui classe correctement la plupart des manchots, cela semble bien, mais « la plupart » cache beaucoup de choses : quelles erreurs, combien, et de quelle gravité ? Dans la prochaine leçon, nous ouvrons la boîte des erreurs et apprenons à les compter correctement.

Quiz

Trois questions pour vérifier vos acquis. Choisissez une réponse ou dépliez la solution sous chaque question. Au clavier : les flèches choisissent, Entrée ou Espace valide.

1. Que produit la régression logistique avant qu’un seuil soit appliqué ?
Voir la réponse

Bonne réponse : Une probabilité entre 0 et 1 pour l’une des classes

La sigmoïde transforme la somme pondérée en probabilité, et le seuil transforme cette probabilité en décision.

2. Vous montez le seuil de 0,5 à 0,8. Qu’arrive-t-il à la frontière ?
Voir la réponse

Bonne réponse : Elle se translate sans pivoter : moins de manchots sont classés dans l’espèce B

Chaque seuil correspond à une droite de même direction ; un seuil plus strict la décale pour que seuls les cas assurés passent.

3. Pourquoi la régression logistique utilise-t-elle la perte logistique plutôt que l’erreur quadratique ?
Voir la réponse

Bonne réponse : La perte logistique punit très fortement les réponses fausses et assurées, ce qui convient aux probabilités

La perte logistique grimpe en flèche quand la probabilité donnée à la vraie classe tend vers zéro, ce qui décourage une confiance injustifiée.

À retenir

  • La classification prédit une catégorie ; la frontière de décision sépare les régions de chaque classe.
  • La régression logistique fait passer une somme pondérée par la sigmoïde pour obtenir une probabilité.
  • Le seuil transforme une probabilité en décision ; c’est un choix sur les coûts, pas un 0,5 figé.
  • Changer le seuil décale la frontière d’une régression logistique sans la faire pivoter.

Pour aller plus loin : formule, code, pratique

Les maths

Le modèle calcule un score z = w·x + b et le transforme en probabilité avec la sigmoïde, p = 1 / (1 + e^(−z)). Il est entraîné en minimisant la perte logistique L = −mean( y·ln p + (1 − y)·ln(1 − p) ), dont le gradient est simplement mean((p − y)·x) pour chaque poids.

  • La prédiction est la classe 1 quand p ≥ t. Comme la sigmoïde est croissante, c’est la même chose que z ≥ ln(t / (1 − t)).
  • Pour t = 0.5, le membre de droite vaut 0, donc la frontière est la droite w·x + b = 0. Pour t = 0.3, il vaut −0.85 : même direction, décalée vers la classe 0.
  • w fixe la direction de la frontière. t ne fait que la faire glisser.
  • Une réponse fausse mais sûre d’elle coûte cher avec la perte logistique, puisque −ln p croît sans limite quand p tend vers 0.
En code (Python)

Le modèle du lab : Adelie contre manchot à jugulaire d’après la longueur et la hauteur du bec, standardisées, évalué sur les mêmes manchots à quatre seuils :

import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler

df = pd.read_csv("data/raw/penguins.csv")
df = df[df["species"].isin(["Adelie", "Chinstrap"])].dropna(subset=["bill_length_mm", "bill_depth_mm"])
X, y = df[["bill_length_mm", "bill_depth_mm"]], df["species"] == "Chinstrap"
model = make_pipeline(StandardScaler(), LogisticRegression()).fit(X, y)
p = model.predict_proba(X)[:, 1]  # probabilité de manchot à jugulaire
for t in [0.1, 0.3, 0.5, 0.9]:
    wrong = int(((p >= t) != y).sum())  # manchot à jugulaire quand p >= t
    print(f"threshold {t}: {wrong} mistakes, accuracy {1 - wrong / len(y):.1%}")

Sortie

threshold 0.1: 21 mistakes, accuracy 90.4%
threshold 0.3: 3 mistakes, accuracy 98.6%
threshold 0.5: 7 mistakes, accuracy 96.8%
threshold 0.9: 17 mistakes, accuracy 92.2%

Le notebook lié sous la sortie télécharge lui-même les données. Le meilleur seuil ici est 0,3, pas le 0,5 par défaut.

Pour les praticiens
  • predict() utilise toujours 0,5. Pour un autre seuil, prenez predict_proba et comparez vous-même, comme ci-dessus, ou enveloppez le modèle dans FixedThresholdClassifier (seuil fixe) ou TunedThresholdClassifierCV (seuil choisi par validation croisée), tous deux dans scikit-learn 1.5 ou plus récent.
  • Choisissez le seuil sur des données de validation, pas sur les lignes dont vous rendez compte. Les 98,6 % ici sont mesurés sur les mêmes manchots que ceux sur lesquels le modèle a été ajusté, donc ils sont optimistes.
  • Standardisez les variables. LogisticRegression applique par défaut une régularisation L2 (C=1.0), et cette pénalité dépend de l’échelle de chaque variable.
  • Comparez l’exactitude à la référence de la classe majoritaire, et quand les classes sont déséquilibrées ou que les coûts diffèrent, regardez les deux types d’erreur séparément.
  • Une probabilité ne vaut que ce que valent les données sur lesquelles elle a été ajustée. Pour un animal d’une autre population, une réponse assurée peut quand même être fausse.

Aller plus loin dans l’Atlas

Articles de l’encyclopédie sur les notions de cette leçon :