SVM cherche à trouver un hyperplan de dimension D-1 (si on a 2 caractéristiques, l’hyperplan sera un simple ligne; pour 3 caractéristiques, ce sera un plan 2D) pour différencier les classes.
Tout hyperplan peut être exprimé sous la forme d’un vecteur w et constante b:
\[\text{Hyperplan} \\ w \cdot x + b = 0\]SVM distingue deux classes:
la classe négative (-1), inférieure à l’hyperplan, et la classe positive (+1), supérieure à l’hyperplan.
En connaissant l’hyperplan, on pourra donc prédire la valeur du point x suivant le signe obtenu — positif ou négatif
\[f(x) = signe(w \cdot x + b)\]Il peut exister plusieurs hyperplan pour séparer les deux classes. Pour trouver le meilleur hyperplan, SVM va uniquement considérer les points les plus proches de l’hyperplan, dits support vectors.
La distance entre les support vectors et l’hyperplan est appelée marge et le but est de maximiser cette marge — plus la marge est grande, moins il y a de risque de misclassification.
La distance entre un point xi et l’hyperplan est notée r:
\[r = \frac{|w^T x_i + b|}{||w||}\]La distance entre deux supports vectors (xs) de part et d’autre de l’hyperplan sera donc
\[r = \frac{y_s(w^T x_s + b)}{||w||} = \frac{1}{||w||}\]Ce qui nous permet d’exprimer la marge comme suit:
\[\rho = 2r = \frac{2}{||w||}\]La fonction coût cherche à faire plusieurs choses:
Admettre des erreurs de classification.
C est un hyperparamètre de régularisation: pour un C infiniment grand, la marge devient une marge stricte (hard margin) tandis qu’un petit C résulte en une limite souple (soft limit) plus large — qui accepte davantage de points mal classifiés.
Suivant les implémentations, on peut avoir λ à la place, qui fait l’inverse de C (C ∼ 1/λ): un grand λ admet une marge souple plus grande tandis que pour un λ infiniment petit, la marge devient une marge stricte.
Que faire quand les données ne peuvent pas être séparées linéairement, ou s’il y a plus de deux variables indépendantes? On peut résoudre ce problème en introduisant une caractéristique supplémentaire. Par exemple, pour un cercle on peut ajouter une caractéristique z=x²+y²:
Il n’est pas nécessaire de le faire manuellement, SVM peut le faire automatiquement avec un kernel.
Un kernel est une fonction qui ajoute des dimensions à un espace donné — autrement dit, qui ajoute des caractéristiques à l’ensemble de données. Ce faisant, le kernel transforme un problème qui n’est pas linéairement séparable en un problème qui l’est.
Les différents types de kernel utilisés pour résoudre un problème de classification sont:
Peut être appliqué aux problèmes non linéaires
L’impact des valeurs aberrantes est moindre par rapport à une regression linéaire
Fonctionne très bien si on trouve le bon Kernel
L’importance des caractéristiques est difficile à interpréter avec un kernel
Long a entraîner si l’ensemble de données est grand