Support Vector Machine (SVM)

Support Vector Machine

Une Support Vector Machine (SVM) est un algorithme de Machine Learning supervisé qui trouve l'hyperplan séparant le mieux les points de données d'une classe de ceux d'une autre classe.

Fonctionnement des Support Vector Machines

Une Support Vector Machine est un algorithme de Machine Learning supervisé souvent utilisé pour les problèmes de classification et de régression dans des applications telles que le traitement du signal, le traitement du langage naturel (NLP), la reconnaissance vocale et la reconnaissance d'images. L'objectif de l'algorithme SVM est de trouver un hyperplan qui, du mieux possible, sépare les points de données d'une classe de ceux d'une autre classe. Cet hyperplan peut être une ligne dans le cas d'un espace 2D ou un plan dans le cas d'un espace à n dimensions, où n représente le nombre de caractéristiques pour chaque observation dans le jeu de données. Plusieurs hyperplans peuvent séparer les classes dans les données. L'hyperplan optimal, dérivé par l'algorithme SVM, est celui qui maximise la marge entre deux classes.

La marge correspond à la largeur maximale de l'espace parallèle à l'hyperplan qui ne contient aucun point de données. Les points de données qui marquent les limites de cet espace parallèle et sont les plus proches de l'hyperplan de séparation sont les vecteurs de support. Les vecteurs de support désignent un sous-ensemble d'observations d'apprentissage qui identifient l'emplacement de l'hyperplan de séparation.

Illustration de l'hyperplan identifié par une Support Vector Machine, présenté avec les vecteurs de support, la marge et les points de données séparés en deux classes.

Utilisation d'un algorithme SVM pour maximiser la largeur de la marge entre deux classes, représentées par des plus et des moins et séparées par un hyperplan.

Workflow pour la modélisation SVM

Un workflow type pour créer un modèle Support Vector Machine comporte les étapes suivantes :

Prétraitement des données

L'apprentissage d'un modèle SVM à partir de données brutes donne souvent de mauvais résultats en raison des valeurs manquantes et des valeurs aberrantes, ainsi que de la redondance des informations. Vous pouvez effectuer un nettoyage de données pour traiter les valeurs manquantes ou aberrantes, et une extraction de caractéristiques pour choisir le bon ensemble de caractéristiques à partir des données.

L'extraction de caractéristiques transforme les données brutes en caractéristiques numériques qui peuvent être traitées tout en préservant les informations dans le jeu de données d'origine. Les techniques de réduction de la dimensionnalité, telles que l'analyse en composantes principales (ACP), réduisent le nombre de caractéristiques tout en conservant les informations les plus importantes. Cette approche rend les modèles Support Vector Machine robustes et capables de traiter les jeux de données complexes.

Une fois que vos données sont traitées, divisez-les en jeux d'apprentissage et de test. Utilisez la validation croisée pour diviser les données de manière optimale. Le modèle SVM est entraîné sur le jeu de données d'apprentissage, et le jeu de données de test est utilisé pour évaluer les performances du modèle sur des données invisibles.

Choix d'un noyau

En fonction de la distribution des données, choisissez une fonction noyau appropriée (linéaire, polynomiale, RBF, etc.). Lorsqu'une séparation linéaire est impossible, une fonction noyau transforme les données en un espace de dimension supérieure, ce qui simplifie la séparation des classes.

Choix du noyau approprié pour votre SVM

Type de SVM Noyau Mercer Description
Fonction gaussienne ou RBF (radial basis function) \( K({x_1},{x_2})=exp(−‖{x_1}−{x_2}‖^2/2{σ^2}) \) Apprentissage à une classe. \( σ \) représente la largeur du noyau.
Linéaire \( K({x_1},{x_2})={x_1}T{x_2} \) Apprentissage à deux classes.
Polynôme \( K({x_1},{x_2})=({x_1}T{x_2}+1)ρ \) \( ρ \) représente l'ordre de la fonction polynomiale.
Sigmoïde \( K({x_1},{x_2})=tanh({β_0}{x_1}T{x_2}+{β_1}) \) Il ne s'agit d'un noyau Mercer que pour certaines valeurs \( β_0 \) et \( β_1 \).

Apprentissage du modèle SVM

Créez et entraînez votre modèle SVM à l'aide d'un jeu de données d'apprentissage. Entraîner une Support Vector Machine revient à résoudre un problème d'optimisation quadratique pour trouver un hyperplan qui maximise la marge entre les classes. L'algorithme Support Vector Machine identifie les vecteurs de support et détermine l'hyperplan optimal. Utilisez le modèle entraîné pour classer les points de données nouveaux et invisibles en fonction de l'hyperplan optimal.

Évaluation du modèle SVM

Testez le modèle à l'aide du jeu de données de test. Évaluez la performance du modèle à l'aide de métriques telles que la précision, la matrice de confusion, la justesse, le score F1 ou le rappel.

Ajustement des hyperparamètres

Ajustez les hyperparamètres afin d'améliorer la performance du modèle. Utilisez une technique de recherche telle que l'optimisation bayésienne, qui s'appuie sur des modèles probabilistes pour trouver les meilleurs hyperparamètres.

Types de classificateurs SVM

Support Vector Machines linéaires

Les SVM linéaires sont utilisés pour les données linéairement séparables comportant exactement deux classes. Ce type d'algorithme Support Vector Machine utilise une limite de décision linéaire pour séparer tous les points de données des deux classes.

L'algorithme SVM ne peut trouver cet hyperplan que pour les problèmes linéairement séparables. Pour les tâches les plus complexes, lorsque les données ne sont pas séparables, la Support Vector Machine peut utiliser une marge souple, c'est-à-dire un hyperplan qui sépare de nombreux points de données, mais pas tous. L'algorithme maximise la marge souple, qui tolère un petit nombre d'erreurs de classification.

Tracé MATLAB illustrant une Support Vector Machine avec une marge souple tolérant une erreur de classification lors de la séparation des classes.

SVM à marge souple tolérant la mauvaise classification d'un point de données de la classe -1 (bleu). (Consultez la documentation MATLAB.)

Support Vector Machines non linéaires

Les SVM sont également utilisées pour effectuer des tâches de classification et de régression non linéaire. Pour les données qui ne sont pas linéairement séparables, les Support Vector Machines utilisent des fonctions noyau pour transformer les caractéristiques. Le nombre de caractéristiques transformées est déterminé par le nombre de vecteurs de support.

Les fonctions noyau mappent les données dans un espace différent, souvent de dimension supérieure. Cette transformation peut faciliter la séparation des classes en simplifiant la limite de décision non linéaire complexe en limite linéaire dans l'espace de caractéristiques mappé de dimension supérieure. Au cours de ce processus, que l'on appelle communément l'astuce des noyaux, il n'est pas nécessaire de transformer explicitement les données, ce qui serait coûteux en calcul. Les fonctions noyau pour les données non linéaires comprennent les polynômes, la fonction à base radiale (fonction gaussienne), et le perceptron multicouches ou sigmoïde (réseau de neurones).

Diagramme de dispersion MATLAB illustrant une Support Vector Machine avec un hyperplan séparant les points de données en deux classes.

Un classificateur SVM non linéaire entraîné dans MATLAB avec une fonction noyau gaussienne. (Voir le code.)

Régression du vecteur de support

Les SVM sont principalement utilisées pour les tâches de classification, mais elles peuvent également être adaptées pour la régression. La régression SVM est considérée comme une technique non paramétrique, car elle s'appuie sur les fonctions noyau. Contrairement à ce qui se passe dans la régression linéaire, où la relation entre les variables de réponse (sortie) et de prédicteur (entrée) est connue, la régression de vecteur de support (SVR) a pour objectif de trouver cette relation. Pour ce faire, la SVR identifie l'hyperplan qui convient le mieux aux données dans une marge de tolérance spécifiée, appelée marge, tout en maintenant les erreurs de prédiction à un niveau minimum.

Le principe de fonctionnement de la SVR est le même que celui des classificateurs Support Vector Machine, sauf que la SVR vise à prédire des valeurs continues au lieu de classes discrètes. La SVR peut traiter des données linéaires et non linéaires en utilisant les différents types de noyaux. L'astuce des noyaux vous permet d'effectuer une régression non linéaire en mappant les données dans un espace de dimension supérieure.

Importance des Support Vector Machines

Avantages des SVM

Les SVM font partie des algorithmes d'apprentissage supervisé les plus populaires dans les domaines du Machine Learning et de l'intelligence artificielle, principalement parce qu'elles sont capables de traiter les données à dimensionnalité élevée et les limites de décision complexes de manière efficace. Les principaux avantages des Support Vector Machines sont les suivants :

  • Polyvalence des données. Les SVM sont particulièrement efficaces lors du traitement des jeux de données à dimensionnalité élevée et non structurées. Elles peuvent être utilisées pour les données linéaires et non linéaires, ce qui les rend utiles pour de nombreuses applications.
  • Robustesse. Les SVM sont moins sujettes au surajustement, en particulier dans les espaces de grande dimension, en raison du paramètre de régularisation qui contrôle le compromis entre l'obtention d'un faible niveau d'erreur sur les données d’apprentissage et la réduction de la norme des pondérations.
  • Interprétabilité. La limite de décision créée par un classificateur SVM linéaire est claire et interprétable, ce qui peut être utile pour comprendre les prédictions de modèle et prendre des décisions éclairées.
  • Précision. Les SVM sont très précises et efficaces pour les jeux de données peu volumineux, en particulier dans les cas où le nombre de dimensions est supérieur au nombre d'échantillons.

Applications des SVM

Les avantages précédemment mentionnés font des Support Vector Machines un choix intéressant pour la modélisation des données dans un large éventail d'applications :

  • Traitement du langage naturel. Les SVM sont couramment utilisées dans les tâches de traitement du langage naturel telles que la détection des spams et l'analyse de sentiments par classification de textes en catégories.
  • Computer Vision. Les SVM sont utilisées dans les tâches de classification d'images telles que la reconnaissance d'écriture et la détection de visages ou d'objets, et en tant qu'outil de diagnostic médical pour la classification des images IRM susceptibles d'indiquer la présence d'une tumeur.
  • Traitement du signal. Les SVM sont également appliquées sur les données de signal dans certaines tâches telles que la détection d'anomalies, la reconnaissance vocale et l'analyse de signaux biomédicaux.
  • Détection d'anomalies. Les SVM peuvent être entraînées pour trouver un hyperplan qui sépare les données normales des anomalies.
  • Bioinformatique. Les SVM sont utilisées dans la classification des données biologiques, la classification des protéines et l'analyse des profils d'expression génétique.
Image RGB hyperspectrale avec carte de vérité terrain et carte de classification des SVM.

Une image hyperspectrale classée à l'aide d'un classificateur SVM. (Voir le code MATLAB.)

Inconvénients des SVM

Comme tous les modèles de Machine Learning, les Support Vector Machines présentent certaines limites :

  • Jeux de données volumineux. Étant donné que les SVM consomment beaucoup de ressources de calcul et de mémoire, elles ne sont pas adaptées au traitement de jeux de données volumineux. Même si l'astuce des noyaux permet aux Support Vector Machines de traiter des données linéaires, elles exigent des calculs complexes. En effet, il s'agit pour ces machines de résoudre un problème d'optimisation quadratique. Dans les jeux de données volumineux, la matrice de noyaux serait également volumineuse, et il faudrait beaucoup de mémoire.
  • Données bruitées. Les SVM ne sont pas adaptées aux données bruitées, car leur but est d'optimiser la marge entre les classes.
  • Interprétabilité. Les SVM linéaires sont interprétables, mais pas les SVM non linéaires. Ces dernières utilisent des transformations complexes qui rendent difficile l'interprétation de la limite de décision.
Graphique illustrant les algorithmes de Machine Learning ; l'interprétabilité est représentée sur l'axe des abscisses et la puissance de prédiction, sur l'axe des ordonnées. Les SVM présentent une interprétabilité faible, mais sont intéressants pour les prédictions.

Comparaison de la puissance de prédiction et de l'interprétabilité pour les algorithmes de Machine Learning courants.

Support Vector Machines (SVM) avec MATLAB

Grâce à MATLAB® et Statistics and Machine Learning Toolbox™, vous pouvez entraîner, évaluer et effectuer des prédictions grâce à des modèles SVM destinés à la classification et à la régression. MATLAB propose des outils permettant de construire des modèles Support Vector Machine (SVM) efficaces, comme la sélection de caractéristiques, l'affinement d'hyperparamètres, la validation croisée ou encore les métriques de performances. Les applications de Machine Learning low-code dans MATLAB vous permettent d'entraîner et d'évaluer les SVM de manière interactive, de générer du code C/C++ et d'effectuer le déploiement sur des CPU et des microcontrôleurs, sans avoir à rédiger de code par vous-même.

Prétraiter les données

Pour que les résultats soient exacts, les données doivent être exemptes de valeurs aberrantes et prêtes pour l’apprentissage du modèle. MATLAB vous permet d'effectuer des tâches de nettoyage comme par exemple, traiter les valeurs aberrantes et manquantes, ou encore normaliser et lisser les données. Vous pouvez utiliser les tâches du Live Editor pour le prétraitement des données ou l'application Data Cleaner pour prétraiter vos données de manière interactive. Ces applications permettent en outre de générer du code.

MATLAB supporte plusieurs types de données : données de séries temporelles, texte, images et audio, entre autres. Il est également possible d'extraire des fonctionnalités grâce à des toolboxes spécialisées, comme Audio Toolbox™ et Signal Processing Toolbox™. Vous pourrez ainsi mesurer des caractéristiques distinctives dans différents domaines et réutiliser des calculs intermédiaires.

Entraîner le modèle SVM

Pour entraîner vos modèles SVM pour la classification binaire ou multiclasse et les tâches de régression, vous pouvez utiliser les fonctions fitcsvm et fitrsvm. Pour les Support Vector Machines non linéaires, certaines fonctions noyau sont supportées (linéaires, polynomiales et RBF, par exemple). Vous pouvez également créer et indiquer une fonction noyau personnalisée (sigmoïde, par exemple).

Vous pouvez également entraîner des modèles SVM de manière interactive à l'aide des applications Classification Learner et Regression Learner. Ces applications vous permettent d'effectuer le workflow d'un modèle SVM dans son intégralité (de l’apprentissage à l'affinement) sans avoir à rédiger de code. Elles vous permettent également d'explorer les données, de sélectionner des caractéristiques, d'effectuer un apprentissage automatisé, d'optimiser des hyperparamètres et d'évaluer les résultats.

Capture d'écran illustrant la précision de la validation de plusieurs modèles SVM, avec une matrice de confusion de validation composée de données sur l'ionosphère modélisées par un modèle SVM linéaire.

Matrice de confusion de validation créée à l'aide de l'application Classification Learner. (Voir le code MATLAB.)

Les applications peuvent générer du code C/C++ et vous permettent d'exporter votre modèle SVM. Ainsi, vous pouvez facilement partager vos résultats et les analyser en dehors de l'application. Vous pouvez par exemple exporter votre modèle Support Vector Machine depuis les applications Classification Learner ou Regression Learner, puis l'importer dans l'application Experiment Manager. Vous pourrez y effectuer des tâches supplémentaires, comme modifier les données d'apprentissage, ajuster les plages de recherche des hyperparamètres et effectuer des tests d’apprentissage personnalisés.

Effectuer des prédictions

Une fois le modèle SVM entraîné, vous pouvez prédire des libellés avec la fonction « predict ». Vous pouvez simuler votre modèle SVM entraîné dans Simulink grâce aux blocs ClassificationSVM Predict ou RegressionSVM Predict.

Évaluer les résultats

Vous pouvez évaluer la performance du modèle SVM de deux façons : de manière programmatique, avec des fonctions comme confusionchart et rocmetrics, ou de manière interactive. Grâce aux applications de Machine Learning, vous pouvez comparer les performances de différents modèles pour trouver celui qui convient le mieux à vos données.

Une fois que les classificateurs ont été entraînés dans l'application Classification Learner, vous pouvez comparer les modèles en termes de précision, visualiser les résultats des classificateurs en effectuant des représentations graphiques des classes, ou encore vérifier les performances à l'aide d'une matrice de confusion, d'une courbe ROC ou d'une courbe justesse-rappel.

De même, dans l'application Regression Learner, vous pouvez comparer des modèles selon certaines métriques, visualiser des résultats de régression dans un diagramme de réponse ou en comparant dans un graphique la réponse prévue à la réponse effective, ou encore évaluer les modèles à l'aide d'un tracé résiduel.

Sur le graphique, la prédiction de la réponse de la Support Vector Machine est représentée par la ligne continue, tandis que la réponse effective est représentée les points autour de la ligne.

Graphique représentant la prédiction de la réponse et la réponse effective pour un modèle de régression entraîné dans l'application Regression Learner. Plus les points sont proches de la ligne, plus la prédiction est fiable. (Voir le code MATLAB.)