Concepts d'IA en Python

Bases de la classification : softmax et k plus proches voisins en Python

Classer, c'est choisir une étiquette, comme chat ou chien. Un modèle peut produire un score par classe et laisser softmax les transformer en probabilités, ou une méthode simple comme les k plus proches voisins peut faire voter les exemples connus les plus proches.

Le concept en termes simples

Classer, c'est choisir une étiquette, comme chat ou chien. Un modèle peut produire un score par classe et laisser softmax les transformer en probabilités, ou une méthode simple comme les k plus proches voisins peut faire voter les exemples connus les plus proches.

Transformez des scores en probabilités de classes avec softmax, évaluez-les avec l'entropie croisée et classez des points avec les k plus proches voisins.

Idées clés

  • Softmax conserve l'ordre des scores et fait en sorte qu'ils totalisent 1.
  • L'entropie croisée catégorielle pénalise surtout les mauvaises réponses données avec assurance.
  • Les k-NN n'ont pas de phase d'entraînement : ils comparent un nouveau point aux exemples stockés.
  • Naive Bayes et les arbres de décision (impureté de Gini, gain d'information) sont d'autres classifieurs classiques.

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 n'importe où sur le graphique de gauche pour classer un nouveau point par le vote de ses k plus proches voisins. Changez les scores à droite pour voir réagir softmax.

Code d’exemple

Exécuter le code →
main.py
import math
from collections import Counter

# Softmax turns raw scores into probabilities that add up to 1.
def softmax(scores):
    exps = [math.exp(s - max(scores)) for s in scores]
    total = sum(exps)
    return [e / total for e in exps]

probs = softmax([2.0, 1.0, 0.1])
print("softmax:", [round(p, 3) for p in probs])
# Cross-entropy is small when the true class gets a high probability.
print("cross-entropy if class 0 is right:", round(-math.log(probs[0]), 3))

# k-nearest neighbours: label a point by a vote of the closest examples.
examples = [((1, 1), "cat"), ((1, 2), "cat"), ((5, 5), "dog"), ((6, 5), "dog"), ((5, 6), "dog")]
def knn(point, k=3):
    nearest = sorted(examples, key=lambda e: math.dist(point, e[0]))[:k]
    return Counter(label for _, label in nearest).most_common(1)[0][0]

print("(2, 1) ->", knn((2, 1)))
print("(5, 4) ->", knn((5, 4)))

Résultat attendu

softmax: [0.659, 0.242, 0.099]
cross-entropy if class 0 is right: 0.417
(2, 1) -> cat
(5, 4) -> dog

Fonctionnement

softmax() applique l'exponentielle aux scores et divise par leur somme, donc les trois probabilités totalisent 1 ; soustraire d'abord le maximum évite les dépassements. L'entropie croisée est −log de la probabilité de la bonne classe. knn() trie les exemples par distance et fait voter les 3 plus proches.

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