Vous êtes sur la page 1sur 7

Université de Monastir LFI3- semestre 2

1
Faculté des sciences de Monastir 2019/2020

TP: Introduction au Machine Learning (ML)


 L'objectif de ce TP est de vous présenter une introduction aux principes des machines à vecteurs de
support (SVM).
 Vous devez avoir un minimum d’expérience de programmation.
 Sans forcément être un expert, vous devez connaître le langage Python, et si possible également ses
librairies scientifiques.

Partie 1 : Machine à Vecteurs de Support (SVM)


Une machine à vecteurs de support (SVM) est un classificateur discriminatoire formellement défini par un
hyperplan de séparation. En d'autres termes, à partir de données d'entraînement étiquetées (apprentissage
supervisé), l'algorithme produit un hyperplan optimal qui catégorise les nouveaux exemples. Dans un espace à deux
dimensions, cet hyperplan est une ligne qui divise un plan en deux parties où chaque classe se trouve de part et
d'autre.

Nous commençons par les importations standard :

Maintenant, et à titre d'exemple, prenons le cas simple d'une tâche de classification, dans laquelle les deux classes de
points sont bien séparées :

Un classificateur discriminatoire linéaire tenterait de tracer une ligne droite séparant les deux ensembles de données,
et de créer ainsi un modèle de classification. Pour des données bidimensionnelles comme celles présentées ici, c'est
une tâche que nous pourrions faire à la main. Mais nous voyons immédiatement un problème : il y a plus d'une ligne
de séparation possible qui peut parfaitement discriminer les deux classes !
Nous pouvons les dessiner comme suit :

Il s'agit de trois séparateurs très différents qui, néanmoins, permettent une parfaite discrimination entre ces
échantillons. En fonction de votre choix, un nouveau point de données (par exemple, celui marqué d'un "X" dans cette
parcelle) se verra attribuer une étiquette différente ! De toute évidence, notre simple intuition de "tracer une ligne
entre les classes" ne suffit pas, et nous devons réfléchir un peu plus profondément.

Maximiser la marge

Les machines à vecteurs de support offrent un moyen d'améliorer cette situation. L'intuition est la suivante : plutôt
que de simplement tracer une ligne de largeur zéro entre les classes, nous pouvons tracer autour de chaque ligne une
marge d'une certaine largeur, jusqu'au tout proche point.

Voici un exemple de ce qui pourrait se passer :

Dans les machines à vecteurs de support, la ligne qui maximise cette marge est celle que nous choisirons comme
modèle optimal. Les machines à vecteurs de support sont un exemple d'un tel estimateur de marge maximale.

Voyons le résultat d'un ajustement réel à ces données. Nous utiliserons le classificateur de vecteur de support de
Scikit-Learn pour former un modèle SVM sur ces données. Pour le moment, nous allons utiliser un noyau linéaire et
définir le paramètre de la régularisation C sur un très grand nombre.
Pour mieux voir ce qui se passe ici, nous allons créer une fonction rapide et pratique qui va tracer les limites de
décision SVM pour nous :

C'est la ligne de séparation qui maximise la marge entre les deux séries de points. Remarquez que quelques points
d'entraînement touchent juste la marge. Ils sont indiqués par les cercles sur cette figure. Ces points sont les éléments
pivots de cet ajustement, et sont connus comme les vecteurs de support, et donnent à l'algorithme son nom. Dans
Scikit-Learn, l'identité de ces points est stockée dans l'attribut (support_vectors_) du classificateur :

Une des clés du succès de ce classificateur est que pour l'ajustement, seule la position des vecteurs de support est
importante. Les points qui sont plus éloignés de la marge et qui sont du bon côté ne modifient pas l'ajustement.
Techniquement, c'est parce que ces points ne contribuent pas à la fonction de perte utilisée pour ajuster le modèle,
donc leur position et leur nombre n'ont pas d'importance tant qu'ils ne franchissent pas la marge.

Nous pouvons voir cela, par exemple, si nous traçons le modèle appris à partir des 60 premiers points et des 120
premiers points de cet ensemble de données :
Dans la figure de gauche, nous voyons le modèle et les vecteurs de support pour 60 points d'entraînement. Dans la
figure de droite, nous avons doublé le nombre de points d'entraînement, mais le modèle n'a pas changé : les trois
vecteurs de support du modèle appris à partir des 60 premiers points sont toujours les vecteurs de support du modèle
appris à partir des 120 premiers points. Cette insensibilité au comportement exact des points éloignés est l'un des
points forts du modèle SVM.

Partie 2 : Exemple de reconnaissance faciale


Nous utiliserons l'ensemble de données "Visages étiquetés", qui comprend plusieurs milliers de photos de diverses
personnalités publiques. Un dispositif d'extraction de ces données est intégré à Scikit-Learn :

Nous allons montrer quelques-uns de ces visages pour voir avec quoi nous travaillons :
Chaque image contient [62×47], soit près de 3 000 pixels. Nous pourrions procéder en utilisant simplement la valeur
de chaque pixel comme une caractéristique, mais il est souvent plus efficace d'utiliser une sorte de préprocesseur pour
extraire des caractéristiques plus significatives. Ici, nous utiliserons une analyse en composantes principales pour
extraire 150 composantes fondamentales qui alimenteront notre classificateur SVM. Nous pouvons le faire très
simplement en regroupant le préprocesseur et le classificateur dans un seul pipeline :

Afin de tester les résultats de notre classificateur, nous allons diviser les données en un ensemble d'apprentissage et
de test :

Enfin, nous pouvons utiliser une validation croisée (grid search cross-validation) pour explorer des combinaisons de
paramètres. Dans cet exemple, nous ajusterons le paramètre de Régularisation C (qui contrôle la dureté de la marge)
et Le paramètre gamma (qui contrôle la taille du noyau de la fonction de base radiale) pour déterminer le meilleur
modèle:

Maintenant, grâce à ce modèle à validation croisée, nous pouvons prédire les étiquettes des données de test que le
modèle n'a pas encore vues :
Examinons maintenant quelques images de test ainsi que leurs valeurs prédites :

Sur ce petit échantillon, notre estimateur optimal a étiqueté que trois visage (Par exemple, le visage de Bush dans la
troisième ligne a été mal étiqueté comme étant celui de Blair).

Pour avoir une meilleure idée de la performance de notre estimateur, nous pouvons utiliser les métriques de
classification (precision, rappel et f1-score).

Nous pourrions également afficher la matrice de confusion entre ces classes. Cela nous permet de savoir quelles
étiquettes sont susceptibles d'être confondues par l'estimateur.

Vous aimerez peut-être aussi