Introduction aux SVM

Découvrez les SVM, ces outils classiques du Machine Learning !

a marqué ce sujet comme résolu.

gbdivers : attention, il y a d'un côté la distinction machine learning "classique"/deep learning, et de l'autre apprentissage supervisé/apprentissage non supervisé. Il existe du ML classique supervisé (SVM, perceptrons…), non supervisé (K-means, notamment), et du DL supervisé (réseaux de neurones profonds), et non supervisé (j'ai du regarder sur Google, mais apparemment ça existe, disclaimer je n'ai pas lu l'article).

melepe

Ok, donc on est donc d'accord sur les principes, ce sont 2 notions transverses.

A la lecture de l'intro, je pense qu'un lecteur peut penser que tu assimiles machine learning = apprentissage supervise et deep learning = apprentissage non supervisee.

Quand tu lis par exemple la phrase "un algorithme de machine learning ne sait rien faire ; puis, au fur et à mesure qu'il s'entraîne sur des données, il est capable de répondre de plus en plus efficacement à la tâche qu'on lui demande de faire", si on prend le k-mean que tu cites (donc learning classique non supervise), on n'y a pas de notion d'apprentissage et d'amélioration progressive des résultats retournés par l'algo. Au mieux, on utilisera les résultats retournés par une première passe de l'algo pour supprimer ou regrouper des donnees et relancer l'algo, mais ca ne sera plus les mêmes donnees. Et ca ne sera pas un apprentissage, mais un traitement des donnees fait par une personne.

Edit: c'est vrai que je ne parle pas du tout de l'apprentissage supervisé/non supervisé dans mon article. Mais ce n'est absolument pas le but de cet article d'en parler, donc je pense que je peux faire l'omission.

Oui, je ne disais pas de forcément parler de supervisé et non-supervisé, ce n'est pas nécessaire. Plutôt être sur que le lecteur ne fera cette confusion en lisant l'intro.

en deep learning l'extraction des caractéristiques est laissée à la machine, ce qui n'est pas le cas en ML classique. Après, je peux me tromper là-dessus, mais honnêtement je pense ne pas trop me tromper.

A mon sens, ce n'est pas aussi stricte, on peut balancer des donnees brutes directement en ML aussi (je pense par exemple aux donnees des puces génomiques, qui peuvent être traitées directement par ML). Cela étant dit, je ne suis pas un expert en ML, mais juste un utilisateur. Je ne prendrais pas le risque de m'avancer plus sur ce point ou sur une definition formelle du deep learning.

+0 -0

A la lecture de l'intro, je pense qu'un lecteur peut penser que tu assimiles machine learning = apprentissage supervise et deep learning = apprentissage non supervisee.

Quand tu lis par exemple la phrase "un algorithme de machine learning ne sait rien faire ; puis, au fur et à mesure qu'il s'entraîne sur des données, il est capable de répondre de plus en plus efficacement à la tâche qu'on lui demande de faire", si on prend le k-mean que tu cites (donc learning classique non supervise), on n'y a pas de notion d'apprentissage et d'amélioration progressive des résultats retournés par l'algo. Au mieux, on utilisera les résultats retournés par une première passe de l'algo pour supprimer ou regrouper des donnees et relancer l'algo, mais ca ne sera plus les mêmes donnees. Et ca ne sera pas un apprentissage, mais un traitement des donnees fait par une personne.

Hmm, je ne suis pas d'accord avec toi, dans k-means on demande de classer en $k$ clusters. Dans tous les cas, les points critiques seront ceux à la frontière des clusters, et ça, plus tu auras des points plus tu as de chances que ton cluster soit bien délimité (tu limites les effets dus aux petits échantillons). Plus il a de données (plus il peut s'entraîner sur les données), plus il est efficace.

en deep learning l'extraction des caractéristiques est laissée à la machine, ce qui n'est pas le cas en ML classique. Après, je peux me tromper là-dessus, mais honnêtement je pense ne pas trop me tromper.

A mon sens, ce n'est pas aussi stricte, on peut balancer des donnees brutes directement en ML aussi (je pense par exemple aux donnees des puces génomiques, qui peuvent être traitées directement par ML).

C'est vrai, tu as raison. Je changerai ça à mon retour de vacances, ie dans plusieurs semaines. Je regarderai aussi comment faire pour ôter la source de confusion que tu as pointée. :)

Hmm, je ne suis pas d'accord avec toi, dans k-means on demande de classer en $k$ clusters. Dans tous les cas, les points critiques seront ceux à la frontière des clusters, et ça, plus tu auras des points plus tu as de chances que ton cluster soit bien délimité (tu limites les effets dus aux petits échantillons). Plus il a de données (plus il peut s'entraîner sur les données), plus il est efficace.

melepe

Oui, pour autant, ce n'est pas de l'apprentissage. Dans l'apprentissage, tu as une notion d'information retenue et utilisée.

Quand tu fais un SVM, tu lances l'algo sur un jeu de donnees d'apprentissage et il calcule les parametres de la transformation lineaire. Puis dans la seconde phase, le SVM utilise les parametres calculées dans la premiere phase.

Dans un k-mean, tu n'as pas d'information qui est "retenue" par l'algorithme et il n'y a pas de phase d'apprentissage. Le fait que l'utilisateur relance l'algo avec des parametres différents ne constitue pas un apprentissage pour l'algo. (Et même, avec la répartition aléatoire des données dans un k-mean lors de la premiere iteration fait que si tu lances deux fois un k-mean sur les mêmes donnees avec les mêmes parametres, tu peux tout a fait avoir une classification plus mauvaise la seconde fois).

+0 -0

Si, l'algo retient à quel cluster appartient tel point, ce qui est justement l'info utilisée par la suite.

Dans un k-means, tu as une phase d'apprentissage (répartition en clusters), mais pas de phase de prédiction, contrairement au SVM (c'est une distinction entre supervisé et non supervisé).

Sinon, je ne parle pas de "relancer l'algo", mais de continuer l'entraînement. Dans le cas du k-means, ça correspond à plusieurs itérations du calcul des centroïdes (parce que l'algo ne converge pas forcément), dans le cas d'un réseau de neurones c'est effectivement de repasser les données d'entraînement (on parle d'epoch pour chaque passage des données).
Quand je dis qu'un algo s'entraîne au fur et à mesure, je parle justement des itérations, et tu es d'accord avec moi que plus tu itères, plus tu as de chances d'être proche du résultat ?

Evidemment, si tu relances l'apprentissage avec des initialisations différentes, tu peux obtenir des résultats différents. Mais c'est aussi ça qu'il se passe avec un réseau de neurones classiques, donc en supervisé (les paramètres sont initialisés aléatoirement).

Edit: retiré imprécision, dans un kmeans c'est facile de savoir si on a convergé, il suffit que les centroïdes soient les mêmes entre deux itérations. Par contre, on ne peut pas savoir (en stateless) si on va converger un jour, ou si on va osciller infiniment.

+0 -0

Bonjour les agrumes !

La bêta a été mise à jour et décante sa pulpe à l’adresse suivante :

Merci d’avance pour vos commentaires.


Nouvel an, nouveau moi ! Voici l’article mis à jour.

Dans cette nouvelle version :

  • Correction de la différence machine learning classique/deep learning
  • Rajout de l’explication de l’acronyme SVM plus tôt que ce qui était fait avant
  • Rajout d’une partie qui explique les grandes lignes de l’hyperplan séparateur et du kernel trick avant de rentrer dans le vif du sujet
  • Rajout d’explications et de graphiques dans la partie Multiclasse.

Avec la nouvelle section "Les SVM, dans les grandes lignes", j’ai essayé d’atteindre deux objectifs. La première, c’est de faire en sorte que la majorité des notions expliquées dans cet article soient compréhensibles sans avoir de prérequis en maths (ne c’est pas parce qu’on ne sait pas ce qu’est un espace vectoriel de dimension infinie qu’on ne peut pas savoir ce qu’est un SVM), et la deuxième, c’est de faire en sorte que l’apprentissage "pur et dur" avec les maths soit plus simple : on a déjà vu les idées, on peut donc se concentrer sur les équations. J’espère que ces objectifs sont atteints. :)

Enfin, j’ai rajouté des explications sur les multiclasses, j’espère ne pas avoir été trop technique sur le one vs one. Par contre, je trouve que maintenant, avec ces deux ajouts conséquents, l’article est assez long (20-25 minutes de lecture d’après différents simulateurs). Qu’en pensez-vous ?

+0 -0

En classification, on procède souvent ainsi :

  • J’ai 1000 points dont je connais la classification. J’en choisis 800 aléatoirement, je fais tourner mon SVM sur ces 800 points. Puis je calcule le nombre de biens-classés parmi les 800, mais aussi parmi les 200 autres points. C’est ce qui permet de bien évaluer si le moteur travaille bien.

Je pense qu’il faudrait faire une allusion à cette méthodo, avec les données d’apprentissage d’une part (800 pts dans on cas), et les données de test d’autre part (200 pts).

Normalement, en test classique (pas de cross-validation), tu es censé ne regarder que les performances de ton ensemble de test, non ? Vu qu’idéalement, ton SVM fait 0 erreurs sur l’ensemble d’entraînement, ton taux d’erreurs sur ces données-ci ne sera pas très pertinent.

Je rajoute un court chapitre à ce sujet.

+0 -0

Bonjour,

Les explications que tu donnes sur la validation croisée sont très superficielles (disons même incompréhensibles). A partir du lien que tu donnes, j’ai vaguement compris. Mais c’est finalement sur ce lien : http://www.iptech-group.com/blog/introduction-a-lapprentissage-automatique-avec-scikit-learn que j’ai eu la certitude de bien comprendre le mécanisme.

Beau travail.

Superficielles, c’est fait exprès (je ne voulais pas traiter le sujet, juste dire qu’il existe) ; incompréhensible, c’est déjà plus regrettable. Du coup, je vais simplement dire que la validation croisée ça existe, sans même parler d’ensemble de validation, et donner un lien pour aller plus loin.

Ce sujet est verrouillé.