Classification Multi-classe OvA vs OvO
“Étendre les classifieurs binaires au multi-classes — tableaux de tournoi pour les algorithmes”
Stratégies One-vs-All et One-vs-One pour la classification multi-classe — frontières, scalabilité, SVM et Softmax.
Prérequis
Concepts Couverts
∑Formules Clés
Classificateurs OvA
K classificateurs binaires, un par classe contre toutes les autres — nécessite K fois le temps d'entraînement
Classificateurs OvO
Un classificateur binaire par paire de classes — K(K-1)/2 modèles, chacun entraîné sur 2 classes
Softmax
Normalise K logits en distribution de probabilité — la sortie naturelle pour la classification multi-classes
▶Simulation Interactive
⬡Architecture du Modèle
Le Problème Multi-Classes
De nombreux problèmes réels ont plus de 2 classes : reconnaissance de chiffres (10 classes), classification d'espèces (centaines), catégorisation de produits (milliers). Certains algorithmes (régression logistique, SVM) sont intrinsèquement binaires. Deux stratégies les étendent : OvA entraîne K classificateurs, chacun séparant la classe k de toutes les autres. OvO entraîne K(K-1)/2 classificateurs pour chaque paire. Les réseaux de neurones avec Softmax résolvent le multi-classes nativement.
OvA vs OvO vs Softmax
OvA : K classificateurs, chacun utilise toutes les données. Entraînement rapide. Déséquilibré (1 positif vs K-1 négatifs). Bon pour K grand.
OvO : K(K-1)/2 classificateurs, chacun utilisant seulement 2 classes. Équilibré mais lent pour K grand (100 classes = 4950 classificateurs).
Softmax (LR multinomiale) : modèle unique, K sorties, entraîné avec entropie croisée. Le plus efficace. Natif aux réseaux de neurones.
Convention SVM : OvO est le défaut dans sklearn (historiquement légèrement meilleur). Pour les réseaux de neurones, toujours Softmax.
Classification Multi-classes avec Softmax
import torch import torch.nn as nn from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split from sklearn.multiclass import OneVsRestClassifier, OneVsOneClassifier from sklearn.svm import SVC class="tok-comment"># ── Données dclass="tok-str">'exemple ────────────────────────────────────────────────── X_np, y_np = make_classification(n_samples=class="tok-num">300, n_features=class="tok-num">8, n_classes=class="tok-num">3, n_informative=class="tok-num">6, random_state=class="tok-num">42) X_train_np, X_test_np, y_train_np, _ = train_test_split( X_np, y_np, test_size=class="tok-num">0.2, random_state=class="tok-num">42) class="tok-comment"># ── Multiclasse PyTorch ──────────────────────────────────────────────── K = class="tok-num">3; lot = class="tok-num">16 class ReseauSimple(nn.Module): def __init__(self): super().__init__(); self.fc = nn.Linear(class="tok-num">8, K) def forward(self, x): return self.fc(x) modele = ReseauSimple() x = torch.randn(lot, class="tok-num">8) y = torch.randint(class="tok-num">0, K, (lot,)) poids_classes = torch.tensor([class="tok-num">1.0, class="tok-num">2.0, class="tok-num">1.5]) class="tok-comment"># pondérer les classes rares class="tok-comment"># Softmax + Entropie Croisée (combinées pour la stabilité numérique) critere = nn.CrossEntropyLoss( weight=poids_classes, class="tok-comment"># Pour les classes déséquilibrées label_smoothing=class="tok-num">0.1 class="tok-comment"># Évite les prédictions trop confiantes ) class="tok-comment"># Le modèle produit des logits bruts (pas de softmax dans forward) logits = modele(x) class="tok-comment"># Forme : (lot, K) perte = critere(logits, y) class="tok-comment"># y contient les indices de classe print(f"Perte CE multi-classes : {perte.item():.4f}") class="tok-comment"># Prédictions probs = torch.softmax(logits, dim=-class="tok-num">1) preds = probs.argmax(dim=-class="tok-num">1) class="tok-comment"># Sklearn : stratégie OvR (OvA) ovr = OneVsRestClassifier(SVC(kernel='rbfclass="tok-str">', probability=True)) ovo = OneVsOneClassifier(SVC(kernel='rbf')) ovr.fit(X_train_np, y_train_np) print(fclass="tok-str">"Précision OvR : {ovr.score(X_test_np, _):.3f}")
?Vérification des Connaissances
La progression est sauvegardée dans votre navigateur — aucun compte requis.
Besoin d'un ingénieur IA ou data scientist ?
Je conçois des modèles ML sur mesure, des agents IA, de la vision par ordinateur et de l'automatisation — de l'idée à la production.