Accueil / Factory / Algos ML / SVM linéaire — factory / algos ML / apprentissage supervisé

SVM LINÉAIRE.

Une machine à vecteurs de support trace la frontière qui laisse la plus grande marge possible entre les classes. En version linéaire, c'est une référence pour classer du texte : des milliers de mots en variables, un entraînement en quelques secondes et une précision souvent difficile à battre.

ClassificationTexteMarge maximaleModèle linéaireNiveau : intermédiaire

FICHE D'IDENTITÉ

notes sur 5 · usage entreprise
PerformanceExcellente sur le texte, moyenne sur les tableaux classiques
InterprétabilitéUn poids par mot, lisible, mais pas de probabilité native
VitesseEntraînement rapide, même sur des centaines de milliers de textes
Facilité de réglageUn réglage principal, C, à ajuster par validation croisée
Tolérance aux données brutesVariables à mettre à l'échelle, texte à vectoriser
EN 30 SECONDES

Tracer une route entre deux villages en s'écartant au maximum des maisons les plus proches de chaque côté.

1. On transforme chaque avis en vecteur

Chaque mot devient une variable, pondérée par TF-IDF : fort si le mot est présent dans l'avis et rare dans l'ensemble des avis.

2. On cherche la frontière à marge maximale

Parmi toutes les frontières qui séparent les classes, on retient celle qui s'éloigne le plus des exemples les plus proches. Ces exemples sont les vecteurs de support.

3. On tolère quelques erreurs

Les données réelles ne sont jamais parfaitement séparables. Le paramètre C arbitre entre une marge large et le nombre d'exemples mal placés acceptés.

LE CAS MÉTIER

relation client · distribution / e-commerce / services
EN ENTRÉE

Des avis clients en texte libre

Une à trois phrases par avis, déjà étiquetées positif, neutre ou négatif sur un historique. L'objectif : classer automatiquement les nouveaux avis pour alimenter un baromètre de satisfaction.

EN SORTIE

Un sentiment par avis et les mots qui pèsent

Chaque avis reçoit une classe. Les poids du modèle montrent les mots qui tirent vers le négatif, utiles pour expliquer le baromètre. Sur le jeu d'exemple, l'exactitude atteint 96 % sur les avis mis de côté.

CE QU'ON MESURE

La matrice de confusion, classe par classe

L'exactitude globale masque où sont les erreurs. Ici, la classe neutre est la plus difficile : une partie des avis neutres est prise pour des avis négatifs. C'est ce qu'il faut suivre avant de publier un indicateur.

QUAND LE SORTIR, QUAND L'ÉVITER

OUI

  • Classement de textes : avis, tickets, e-mails, documents
  • Beaucoup de variables et relativement peu de lignes
  • Besoin d'un modèle rapide à entraîner et à réentraîner
  • Classes qui se séparent bien par une combinaison de mots ou de variables

NON

  • Frontière clairement courbe entre les classes : passer à une SVM à noyau
  • Besoin de probabilités fiables : une régression logistique les donne directement
  • Données tabulaires classiques avec interactions : une Random Forest est plus simple
  • Sens fin du texte (ironie, négation complexe) : un modèle de langage type BERT fait mieux
LES 3 RÉGLAGES QUI COMPTENT

Noms donnés pour R (e1071) et Python (scikit-learn).

cost / C

Tolérance aux erreurs. C grand : peu d'erreurs admises à l'entraînement, risque de surapprentissage. C petit : marge plus large, modèle plus robuste. À choisir par validation croisée, sur une échelle logarithmique.

Représentation du texte : weightTfIdf / TfidfVectorizer

Le choix des mots retenus (fréquence minimale, paires de mots) compte souvent plus que le modèle lui-même.

class_weight

Pondération des classes rares, pour éviter que le modèle les sacrifie. class.weights dans e1071, class_weight="balanced" dans scikit-learn.

LE CODE MINIMAL

jeu d'exemple : avis_clients.csv ↓
# Baromètre de satisfaction : SVM linéaire en R
library(tm)
library(e1071)

avis <- read.csv("avis_clients.csv", fileEncoding = "UTF-8")
corpus <- VCorpus(VectorSource(tolower(avis$texte)))
# TF-IDF calculé sur tout le corpus, pour rester simple
dtm <- DocumentTermMatrix(corpus, control = list(removePunctuation = TRUE, weighting = weightTfIdf))
X <- as.matrix(dtm)
y <- factor(avis$sentiment)

set.seed(42)
idx <- sample(nrow(X), round(0.7 * nrow(X)))

# Noyau linéaire ; scale = FALSE car le TF-IDF est déjà sur une échelle commune
modele <- svm(x = X[idx, ], y = y[idx], kernel = "linear", cost = 1, scale = FALSE)
pred <- predict(modele, X[-idx, ])

cat("Exactitude :", round(mean(pred == y[-idx]), 3), "\n")
print(table(prevu = pred, reel = y[-idx]))

QUESTIONS FRÉQUENTES

Que veut dire SVM ?

Support Vector Machine, machine à vecteurs de support en français. Les vecteurs de support sont les exemples les plus proches de la frontière : ce sont eux seuls qui déterminent sa position. Les autres exemples pourraient disparaître sans changer le modèle.

SVM linéaire ou régression logistique ?

Les deux tracent une frontière droite et donnent souvent des performances proches. La SVM se concentre sur les exemples difficiles près de la frontière ; la régression logistique donne des probabilités directement utilisables. Pour un score ou un calcul de gain, on préfère la logistique.

Une SVM donne-t-elle des probabilités ?

Pas nativement : elle donne une distance à la frontière. On peut la convertir en probabilité par calibration, avec CalibratedClassifierCV en Python ou probability = TRUE dans e1071, au prix d'un entraînement plus long.

LES ALGOS VOISINS

à comparer avant de choisir
la version courbe

SVM à noyau

Même principe de marge, mais la frontière peut se plier. Plus puissante, beaucoup plus lente.

Voir la fiche →
encore plus rapide

Naive Bayes

Des probabilités de mots multipliées. Souvent un peu moins précis, excellent sur peu de données.

Voir la fiche →
l'alternative probabiliste

Régression logistique

Performance proche sur le texte, avec en plus des probabilités interprétables.

Voir la fiche →
— formation

Passer de la fiche à la pratique

Dataistudio forme les équipes au machine learning et à l'IA, sur des cas concrets.

Voir les formations →