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 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 règle le compromis biais-variance de façon très visuelle :
- petit (ex. 1) : frontière très découpée, sensible au bruit → variance élevée, sur-apprentissage.
- 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.
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 voisins les plus proches ; petit = variance élevée, 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
Crè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.