Machines à vecteurs de soutien en français

Introduction aux SVMs

Les machines à vecteurs de soutien (SVMs) sont des algorithmes de machine learning supervisé qui excellent dans les tâches de classification. Leur fonctionnement repose sur la recherche d'un hyperplan optimal, qui maximise la marge entre les différentes classes des données. La marge représente la distance entre l'hyperplan et les points de données les plus proches de chaque classe, appelés vecteurs de soutien. Les SVMs se distinguent notamment par leur efficacité dans le traitement de jeux de données à haute dimension et la gestion de données complexes, tout en fournissant une bonne généralisation et en limitant le risque de surapprentissage.

Syntaxe de base

La bibliothèque Scikit-learn propose la classe SVC pour mettre en œuvre les SVMs. Voici la syntaxe fondamentale pour utiliser SVC :

from sklearn.svm import SVC

# Définir le modèle avec les paramètres souhaités
model = SVC(kernel='linear', C=1.0)

# Ajuster le modèle sur les données d'entraînement (X) et les étiquettes (y)
model.fit(X, y)

# Prédire les étiquettes pour de nouvelles données (X_new)
predictions = model.predict(X_new)

Dans cet exemple, un nouveau modèle SVM est créé, il est ajusté sur l'ensemble de formation X et l'ensemble des étiquettes y, et il prédit les étiquettes pour X_new. Lors de la définition d'un modèle SVM, deux paramètres clés doivent être pris en compte, à savoir le kernel et le C.

Paramètre kernel

Le paramètre kernel détermine le type d'hyperplan utilisé pour la séparation des classes. Les options disponibles incluent : - linear : un kernel linéaire, par défaut, adapté aux ensembles de données linéairement séparables. - poly : un kernel polynomial, permettant des frontières de décision plus complexes, mais sujet à un risque de surapprentissage ; l'ajustement du paramètre de degré peut aider à éviter ce surapprentissage. - rbf : un kernel de fonction de base radiale (RBF), créant des frontières de décision lisses et circulaires. - sigmoid : un kernel sigmoïde, qui génère des frontières de décision non linéaires, mais moins souvent utilisé.

Paramètre C

Le paramètre C dans SVC régule le compromis entre la maximisation de la marge et la réduction des erreurs d'entraînement : - Une valeur C élevée favorise une marge plus grande, mais peut entraîner un surapprentissage sur les données d'entraînement. - À l'inverse, une faible valeur C met l'accent sur la minimisation des erreurs d'entraînement, mais risque d'aboutir à une marge plus petite et à une généralisation moins efficace sur des données inconnues.

Pour déterminer la valeur optimale de C, l'expérimentation et des techniques telles que grid search ou cross-validation sont souvent nécessaires. Voici quelques pistes pour choisir la combinaison idéale de kernel et de valeurs C : - Modelisez des données linéairement séparables avec le kernel linéaire. - Pour des données non linéaires modérément complexes, envisagez d'utiliser un kernel RBF ou un kernel polynomial de faible degré avec une valeur C modérée. - En ce qui concerne des données très complexes, essayez différentes combinaisons de kernels et de valeurs C grâce à des techniques de recherche de grille.

Exemple pratique

Prenons un exemple qui crée un jeu de données synthétique de 500 échantillons avec deux classes en utilisant la fonction make_blobs. Ensuite, nous définissons un modèle SVM avec un kernel linéaire et une valeur C de 1. Après l'ajustement, le modèle prédit la classe d'un nouveau point de données [5, 1.5] et la classe prédite est affichée dans la console. Voici le code :

from sklearn.svm import SVC
from sklearn.datasets import make_blobs

# Générer des données échantillons avec deux classes
X, y = make_blobs(n_samples=500, centers=2, random_state=0, cluster_std=0.6)

# Définir et entraîner le modèle SVC
model = SVC(kernel='linear', C=1.0)
model.fit(X, y)

# Nouveau point de données à prédire
new_data = [[5, 1.5]]

# Prédire la classe du nouveau point de données
prediction = model.predict(new_data)
print("Classe prédite :", prediction[0])

Le résultat affiché par le code ci-dessus peut être :

Classe prédite : 1