Tout savoir sur Support Vector Machine (SVM)
L’évolution rapide de la technologie et des données massives a conduit à une demande croissante d’outils d’analyse robustes et précis. Parmi ces outils, le Support Vector Machine a émergé comme l’une des méthodes les plus puissantes et les plus populaires dans le domaine de l’apprentissage automatique ou Machine Learning.
Qu’est-ce qu’un support vector machine (SVM) ?
Un Support Vector Machine, Machine à Vecteur de Support ou SVM, est un algorithme de Machine Learning supervisé utilisé pour la classification, la régression et la détection d’anomalie. Développées dans les années 1990 par Vladimir Vapnik, les machines à vecteurs de support ont pour principe de séparer les données en classes en utilisant une frontière aussi « simple » que possible. Elle va ainsi maximiser la distance, ou marge, entre les différents groupes de données, ainsi que la frontière qui les sépare.
On qualifie les SVMs de « séparateurs à vaste marge », et les données les plus proches de cette frontière sont les vecteurs de support. En d’autres termes, ces algorithmes cherchent à déterminer l’hyperplan maximisant cette marge tout en séparant les différentes classes. C’est ce concept de séparation maximale avec une marge vaste qui permet aux SVM de généraliser efficacement à de nouvelles données, tout en offrant une excellente résistance au surapprentissage.
Fonctionnement d’une machine à vecteur de support
Dans un premier temps, les données d’entraînement doivent être collectées et chaque exemple de données est étiqueté. Le principal objectif des SVMs est de définir un hyperplan de manière optimale dans un espace de grande dimension qui sépare les données en classes.
Dans les problèmes de classification linéaire, il s’agit d’une ligne dans un espace bidimensionnel, un plan dans un espace tridimensionnel, et ainsi de suite pour des dimensions supérieures. Une fois l’hyperplan défini, la machine cherche à maximiser la marge entre cet hyperplan et les vecteurs de support.
En la maximisant, le modèle va être capable de mieux généraliser aux données de test. Pour trouver l’hyperplan optimal, des algorithmes d’optimisation s’appliquent afin de minimiser une fonction de coût prenant en compte la maximisation de la marge et la classification correcte des données d’entraînement. Il peut se formuler comme un problème d’optimisation convexe. Une fois l’hyperplan optimal trouvé, le modèle est évalué sur un ensemble de données de test afin de mesurer ses performances.
Les principales variantes des support vector machines
En fonction de la nature de leur limite de décision, les machines à vecteurs de support sont catégorisées en deux principales variantes.
- Les SVMs linéaires utilisent une limite de décision linéaire pour séparer les points de données appartenant à différentes classes. Elles sont particulièrement efficaces avec des données linéairement séparables. Cela implique qu’une seule droite (dans un espace bidimensionnel) ou un hyperplan (dans des dimensions supérieures) peut diviser de manière précise les points de données en leurs classes respectives.
- Les SVMs non linéaires sont utilisées dès lors que les données ne peuvent pas être séparées en deux classes par une limite de décision linéaire. C’est par exemple le cas avec les données bidimensionnelles. Ce type de SVM recourt alors à des fonctions de noyau, ou kernel, qui transforment les données d’entrée originales en un espace de caractéristiques de dimension supérieure, où les points de données peuvent être séparés linéairement. Un SVM linéaire est ensuite utilisé pour définir une limite de décision non linéaire dans cet espace transformé.
Les avantages des machines à vecteurs de support
Si les SVMs sont un choix privilégié dans de nombreux contextes, c’est parce qu’elles présentent des avantages évidents. Particulièrement efficaces dans les espaces de grande dimension, elles s’adaptent sans problème à des tâches complexes. Elle bénéficie de plus d’une capacité à maximiser la marge entre les classes, favorisant ainsi une bonne généralisation aux données de test. Une particularité qui leur permet de réduire le risque de surapprentissage. Elles parviennent également à gérer efficacement les données bruitées.
Un tel algorithme offre une grande flexibilité. En utilisant des fonctions de noyau ou kernel, il peut en effet modéliser des relations non linéaires entre les caractéristiques des données. Les SVM s’adaptent ainsi à une grande variété de tâches dans le domaine de l’apprentissage automatique, par exemple la classification binaire, la régression ou la classification multi classe.
SVM, un algorithme puissant, mais confronté à des limites et défis
Malgré des performances remarquables, les modèles de machines à vecteurs de support rencontrent également certaines limites dans leur utilisation.
Un modèle inadapté aux ensembles de données volumineux
Face à un data set comportant un nombre d’échantillons très élevé, l’algorithme peut devenir gourmand en termes de temps de calcul et de ressources nécessaires. Cette particularité est liée à la complexité de l’optimisation du modèle. Celle-ci implique le calcul de multiples produits scalaires entre chaque vecteur de données. Des techniques de sous-échantillonnage ou de sélection de caractéristiques doivent alors être mises en œuvre.
Une efficacité diminuée dans un jeu de données bruitées
Lorsque les classes cibles se chevauchent, l’algorithme va chercher à maximiser la marge entre les classes pour parvenir à une meilleure généralisation. Or, lorsqu’elles sont fortement chevauchantes ou si le bruit est important, cette action devient plus difficile. Les performances du modèle vont alors diminuer, car il peut avoir du mal à distinguer efficacement les exemples des différentes classes.
Les problèmes liés à un nombre élevé de caractéristiques
Si le nombre de caractéristiques par point de données dépasse le nombre d’échantillons d’apprentissage, les performances du modèle se retrouvent limitées. C’est le cas, par exemple, avec des données textuelles ou des images à haute résolution.
L’absence d’explication probabiliste pour la classification
Le classificateur à vecteurs de support positionne les données de part et d’autre de l’hyperplan. Pour autant et contrairement à des algorithmes comme les réseaux bayésiens, les SVMs ne fournissent pas de mesure directe de la probabilité d’appartenance à une classe pour un échantillon donné. Son interprétation peut alors s’avérer plus difficile.
Domaines d’application des support vector machines
De la finance à la recherche médicale en passant par le marketing, de nombreux secteurs utilisent les SVMs pour leur efficacité et leur polyvalence :
- pour la reconnaissance de formes et la vision par ordinateur, par exemple la reconnaissance d’objets, la détection de visages, la segmentation d’images ;
- en NLP, ou traitement du langage naturel, pour la classification de texte, l’analyse de sentiment ou la catégorisation de documents ;
- dans le domaine de la Bioinformatique, par exemple pour la prédiction de la structure des protéines, la classification de gènes, la détection de motifs dans les séquences biologiques ;
- dans le secteur de la finance pour la prévision de séries temporelles financières, la détection de fraude ou la modélisation du risque ;
- en marketing et e-commerce pour la recommandation de produits, la segmentation de marché ou encore l’analyse des comportements des consommateurs ;
- les SVMs sont utilisées dans le diagnostic médical, la prédiction de maladies, l’analyse de données médicales ;
- dans les secteurs de l‘industrie et de l’ingénierie, pour le contrôle qualité, la maintenance prédictive et l’optimisation de processus par exemple.
Implémenter un support vector machine dans un projet
Il existe différentes techniques d’implémentation des SVMs, selon les besoins et objectifs du projet.
Implémentation dans un projet de classification en Python
Les bibliothèques nécessaires sont importées et des données synthétiques sont générées.
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.datasets import make_classification
from sklearn.metrics import accuracy_score
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)
Nous divisons ensuite nos données en ensembles d’entraînement et de tests.
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
Pour cet exemple, nous créons une instance de modèle SVM avec un noyau linéaire. Le modèle est alors entraîné sur les données d’entraînement.
svm_model = SVC(kernel=’linear’, random_state=42)
svm_model.fit(X_train, y_train)
Nous pouvons désormais générer des prédictions sur l’ensemble de tests. La précision du modèle est calculée en comparant les prédictions aux vraies étiquettes.
y_pred = svm_model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(« Précision du modèle SVM : {:.2f} ».format(accuracy))
Implémentation dans un projet de régression en Python
Ici encore, nous commençons par importer les différentes bibliothèques utiles.
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.svm import SVR
from sklearn.datasets import make_regression
from sklearn.metrics import mean_squared_error
Les données synthétiques sont générées, puis les données sont divisées en ensembles d’entraînement et de tests.
X, y = make_regression(n_samples=1000, n_features=20, noise=0.1, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
Dans cet exemple, nous créons une instance de modèle avec un noyau gaussien, avant de l’entraîner sur le data set d’entraînement.
svm_model = SVR(kernel=’rbf’)
svm_model.fit(X_train, y_train)
Une fois le modèle entraîné, nous effectuons des prédictions sur l’ensemble de tests. Pour évaluer les performances du modèle, nous calculons la racine carrée de l’erreur quadratique moyenne (RMSE).
y_pred = svm_model.predict(X_test)
rmse = np.sqrt(mean_squared_error(y_test, y_pred))
print(« RMSE du modèle SVM : {:.2f} ».format(rmse))
L’avenir des support vector machines
Depuis leur création, les machines à vecteurs de support ont révolutionné le paysage du Machine Learning. En les combinant avec le Deep Learning, en adressant les problèmes liés à la qualité des données et aux biais, et en explorant de nouvelles directions dans l’apprentissage automatique, nous pourrons continuer à repousser les limites et libérer l’énorme potentiel de l’intelligence artificielle.
Les SVMs restent à ce jour un outil puissant et précieux dans la boîte à outils du Data Analyst et du Data Scientist. Ces métiers d’avenir sont accessibles à travers le Programme Grande École de l’IA School. D’une durée de cinq ans, ce double cursus post-bac permet d’acquérir l’ensemble des compétences requises pour travailler dans le secteur de l’Intelligence Artificielle.