Aller au contenu principal

Module 4 — k plus proches voisins et machines à vecteurs de support

Après les modèles linéaires, deux approches géométriques. Les k plus proches voisins raisonnent par ressemblance directe ; les machines à vecteurs de support cherchent la frontière la plus sûre. Toutes deux reposent sur les distances du cours de mathématiques — et rappellent avec force pourquoi la mise à l'échelle des variables n'est pas optionnelle.

k plus proches voisins : voter par ressemblance

Le principe des k plus proches voisins (kNN) tient en une phrase : pour classer un point, on regarde les kk observations les plus proches et on prend la classe majoritaire. Il n'y a aucun apprentissage à proprement parler : le modèle mémorise les données et calcule les distances au moment de la prédiction.

from sklearn.neighbors import KNeighborsClassifier
model = KNeighborsClassifier(n_neighbors=5).fit(X_train, y_train)

Le paramètre kk règle le compromis biais-variance de façon très visuelle :

  • kk petit (ex. 1) : frontière très découpée, sensible au bruit → variance élevée, sur-apprentissage.
  • kk grand : frontière lisse, décisions moyennées → biais plus élevé, sous-apprentissage.

Ses limites sont réelles : lent à la prédiction quand les données sont nombreuses (il faut tout parcourir), et surtout vulnérable à la malédiction de la dimension — en grande dimension, tous les points deviennent à peu près équidistants et la notion de « voisin » perd son sens (cours de mathématiques, module 4).

Pourquoi l'échelle est vitale ici

kNN calcule des distances : si une variable va de 0 à 100 000 et une autre de 0 à 1, la première écrase totalement le calcul. Sans standardisation, kNN ne mesure quasiment qu'une seule variable. C'est le piège des distances vu au cours de mathématiques, ici à son paroxysme.

from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
model = make_pipeline(StandardScaler(), KNeighborsClassifier(n_neighbors=5))

Le pipeline garantit que la standardisation est apprise sur l'entraînement seul puis appliquée au test — la protection anti-fuite du module 8.

Machines à vecteurs de support : maximiser la marge

La machine à vecteurs de support (SVM) cherche la frontière qui sépare les classes avec la plus grande marge possible — le plus grand couloir vide de part et d'autre. L'intuition est solide : une frontière bien centrée entre les classes généralise mieux qu'une frontière collée à l'une d'elles.

Seuls comptent les points situés au bord du couloir, les vecteurs de support ; les autres n'influencent pas la frontière. Cela rend le modèle robuste et souvent excellent en dimension modérée.

from sklearn.svm import SVC
model = SVC(kernel="rbf", C=1.0).fit(X_train, y_train)

Le paramètre C gère la tolérance aux erreurs de marge : un C grand tolère peu de violations (frontière serrée, variance plus élevée), un C petit accepte des erreurs pour une marge plus large (plus de biais).

Le kernel trick : des frontières non linéaires

Que faire quand les classes ne sont pas séparables par une droite ? Le kernel trick projette implicitement les données dans un espace de plus grande dimension où une séparation linéaire redevient possible — sans jamais calculer explicitement cette projection. Le noyau RBF (gaussien) est le choix par défaut et gère la plupart des frontières courbes. C'est l'astuce qui a fait la réputation des SVM avant l'essor de l'apprentissage profond.

Deux approches puissantes mais datées à grande échelle

kNN et SVM restent d'excellents outils en dimension modérée et sur des jeux de taille raisonnable, et de très bons points de comparaison. Mais ils passent mal à l'échelle : kNN devient lent à la prédiction, et les SVM peinent au-delà de quelques dizaines de milliers d'observations. Sur les grands jeux tabulaires, les méthodes d'ensemble des modules 6 et 7 les surclassent presque toujours. Les connaître reste précieux — pour l'intuition géométrique autant que pour les cas où ils brillent.

En résumé

  • kNN classe par vote des kk voisins les plus proches ; kk petit = variance élevée, kk grand = biais élevé ; sensible à la dimension.
  • Les distances imposent la standardisation : sans elle, kNN (et SVM) ne « voient » que les variables de grande amplitude.
  • La SVM maximise la marge entre les classes ; seuls les vecteurs de support comptent, et C règle la tolérance aux erreurs.
  • Le kernel trick (noyau RBF) permet des frontières non linéaires ; puissant en dimension modérée, moins adapté aux très grands jeux.

Module suivant : les arbres de décision — un modèle enfin non linéaire, lisible, mais fragile seul, qui ouvre la voie aux méthodes d'ensemble.