SVM, SVR & KNN
“La marge maximale est la réponse — plus la rue est large, plus le classifieur est confiant”
SVM : hyperplan à marge maximale, trick du noyau (RBF), SVR avec tube ε. KNN : métriques de distance, choix de k.
Prérequis
Concepts Couverts
∑Formules Clés
Objectif SVM
Maximiser la marge 2/||w|| sous contrainte de bonne classification — plus grande marge = meilleure généralisation
Dual (Noyau)
Astuce du noyau : remplacer x·x par K(x,x) pour des frontières non linéaires — O(n²) en mémoire, pas en espace de caractéristiques
Noyau RBF
Fonction à Base Radiale — application de Gauss de dimension infinie ; γ contrôle la largeur du noyau
▶Simulation Interactive
⬡Architecture du Modèle
L'Idée Clé : Marge Maximale
Imaginez la classification binaire avec un hyperplan séparateur. Une infinité d'hyperplans peuvent séparer les classes — mais lequel généralise le mieux ? Les SVMs répondent : celui avec la marge maximale — la plus grande 'rue' possible entre les deux classes. Les points sur la frontière de la marge sont les vecteurs de support. Seuls ces points déterminent la frontière ; les autres peuvent être supprimés sans la modifier.
L'Astuce du Noyau : Dimensions Infinies Gratuitement
De nombreux jeux de données ne sont pas linéairement séparables dans leur espace d'origine. L'astuce du noyau mappe implicitement les données vers un espace de dimension plus élevée où elles SONT linéairement séparables — sans jamais calculer le mapping explicitement. K(x,x') = φ(x)·φ(x') calcule le produit scalaire dans l'espace haute dimension directement. Le noyau RBF mappe vers un espace de Hilbert de dimension infinie, rendant les SVMs incroyablement puissants.
Les SVMs sont le seul algorithme qui peut provablement fonctionner dans des espaces de caractéristiques de dimension infinie (RKHS). Aucun autre algorithme n'a cette propriété.
Marge Souple : Gérer le Bruit avec du Slack
Pour les données bruitées, le SVM à marge dure (nécessitant une séparation parfaite) ne fonctionnera pas. Le SVM à marge souple introduit des variables de relâchement ξᵢ ≥ 0 permettant quelques erreurs de classification, pénalisées par l'hyperparamètre C. Grand C = marge étroite, faible tolérance aux erreurs (peut sur-ajuster). Petit C = marge large, haute tolérance (peut sous-ajuster).
SVM en Production
from sklearn.svm import SVC, SVR from sklearn.preprocessing import StandardScaler from sklearn.pipeline import Pipeline from sklearn.model_selection import GridSearchCV, train_test_split from sklearn.datasets import make_classification class="tok-comment"># ── Données dclass="tok-str">'exemple ────────────────────────────────────────────────── X, y = make_classification(n_samples=class="tok-num">300, n_features=class="tok-num">10, random_state=class="tok-num">42) X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=class="tok-num">0.2, random_state=class="tok-num">42) class="tok-comment"># CRITIQUE : SVM nécessite une mise à l'échelle des caractéristiques pipeline_svm = Pipeline([ (class="tok-str">'normaliseur', StandardScaler()), (class="tok-str">'svm', SVC(kernel=class="tok-str">'rbf', probability=True)) ]) class="tok-comment"># Optimiser C et gamma grille_params = { class="tok-str">'svm__C': [class="tok-num">0.01, class="tok-num">0.1, class="tok-num">1, class="tok-num">10, class="tok-num">100], class="tok-str">'svm__gamma': [class="tok-str">'scale', class="tok-str">'auto', class="tok-num">0.001, class="tok-num">0.01, class="tok-num">0.1] } recherche_grille = GridSearchCV( pipeline_svm, grille_params, cv=class="tok-num">5, scoring=class="tok-str">'roc_auc', n_jobs=-class="tok-num">1 ) recherche_grille.fit(X_train, y_train) print(fclass="tok-str">"Meilleur AUC : {recherche_grille.best_score_:.4f}") print(fclass="tok-str">"Meilleurs paramètres : {recherche_grille.best_params_}") class="tok-comment"># SVR pour la régression svr = Pipeline([ (class="tok-str">'normaliseur', StandardScaler()), (class="tok-str">'svr', SVR(kernel=class="tok-str">'rbf', C=class="tok-num">100, epsilon=class="tok-num">0.1)) ])
Pièges du SVM
Pas de mise à l'échelle = résultats catastrophiques. SVM est l'algorithme le plus sensible à l'échelle. StandardScaler n'est pas optionnel.
Lent sur grandes données : SVM est O(n²) à O(n³) en entraînement. Utilisez SGDClassifier (perte charnière) pour n > 50K.
Réglage C : trop grand C = sur-ajustement ; trop petit = sous-ajustement. Toujours valider croisement sur grille log.
KNN malédiction dimensionnalité : métriques de distance deviennent insignifiantes en haute dimension. Utilisez PCA d'abord, ou passez à ball-tree/KD-tree avec k=√n.
?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.