Atelier : linéaire contre RBF
Comparer proprement avec échelle et CV.
Énoncé
Sur binaire non linéaire (deux cercles générés en numpy ci-dessous, pas de sklearn.datasets : la génération reste explicite) : SVC(linear) vs SVC(rbf) (leçon mia-noyaux) en pipelines avec échelle, balayage manuel de C/gamma avec cross_validate (Ch14, pas de GridSearchCV : la boucle montre ce que l'automatique cachera), verdict test avec accuracy + matrice. Concluez sur le coût.
Contraintes
Échelle dans le pipeline, graines notées, temps mesurés.
Indices
Cercles générés à la main (angles uniformes + bruit gaussien, graine fixée), StandardScaler obligatoire, boucle manuelle sur C in [0.1, 1, 10] et gamma in ["scale", 0.1] avec cross_validate.
Correction disponibleCherchez d’abord par vous-même.Voir la correction
Correction
import numpy as np
from sklearn.svm import SVC
rng = np.random.default_rng(0)
ang = rng.uniform(0, 2 * np.pi, 200)
X = np.vstack([np.column_stack([np.cos(ang[:100]), np.sin(ang[:100])]),
np.column_stack([3 * np.cos(ang[100:]), 3 * np.sin(ang[100:])])])
y = np.array([0] * 100 + [1] * 100)
lin = make_pipeline(StandardScaler(), SVC(kernel="linear"))
rbf = make_pipeline(StandardScaler(), SVC(kernel="rbf"))
Attendu : linéaire ≈ 50 %, RBF > 90 %, temps RBF supérieur. Moralité : puissance locale contre coût global — d'où les forêts comme alternative tabulée.