Machine Learning
Machine Learning
C'est pourquoi, avant de rentrer dans le vif du sujet, je vous propose de faire un tour rapide du
domaine de la science des données, et en quoi elle est devenue une source de valeur ajoutée
pour les entreprises.
Qui dit nouveau métier, dit aussi « anglicismes ». Eh oui, vous trouverez très souvent dans vos recherches
de nombreux termes techniques non traduits, bien plus communs que leurs équivalents dans la langue de
Molière... À commencer par "machine learning". Ne vous étonnez donc pas de trouver de nombreux mots
anglais dans ce cours. Je vous conseille vivement de vous familiariser avec eux.
Qu’est-ce que la data science ?
Pour démarrer, voici une première définition de la data science :
Le premier objectif du data scientist est de produire des méthodes (automatisées, autant que
possible) de tri et d'analyse de données afin d'en extraire des informations utiles.
Comme une mode s'est créée autour de ces métiers, un premier réflexe des entreprises est de
penser que la data science constitue une sorte de baguette magique qui va pouvoir prédire
beaucoup de choses de façon précise. 🔮
Mais attention à ne pas tomber dans le fantasme ! Deux composantes sont nécessaires avant
de se demander si la data science peut, oui ou non, apporter de la valeur et aider à la résolution
d'un problème : des données et une problématique bien définie.
Un autre frein est que les données ne sont pas toujours utilisables d’un point de vue
éthique ou pour des raisons de sécurité. Pensez à vous assurer que vous pouvez bien
exploiter les données pour votre travail.
Une expression souvent utilisée pour désigner cette situation où l'on commence sans donnée
est le “cold start problem”. Trouver comment travailler avec pas ou peu de données est un
domaine de recherche très actif.
La valeur d'un data scientist réside aussi dans sa capacité à trouver des manières innovantes
de récupérer des données auxquelles on ne penserait pas au premier abord. Faites appel à
votre esprit de hacker et essayez de bien réfléchir à la façon de récupérer des données utiles,
même s'il ne semble pas y en avoir à première vue. 🤓
Estimer la faisabilité d'un projet est toujours compliqué en data science, et il est normal
que cela vous paraisse flou si vous débutez ! Ce n'est qu'en pratiquant, en développant votre
propre expérience dans le domaine, que vous arriverez à affiner votre jugement et à redéfinir
précisément des problématiques mal définies ou irréalistes, rentables ou non. À la fin de ce
cours, vous aurez déjà acquis quelques réflexes à ce sujet !
Une manière de préciser cette problématique en milieu professionnel, c’est de passer par une
phase de prototypage qui permet de tester la viabilité et la solidité du projet. Créer un
prototype permet rapidement de détecter s’il y a une opportunité car les plus gros obstacle sont
écartés : la récupération des données, la formulation du problème à résoudre, une estimation
des coûts nécessaires, les difficultés d’implémentation hardware ou software, etc.
L’analyse de données (“data analysis”), elle, utilise des méthodes issues des
statistiques classiques comme les estimateurs, les analyses de corrélations ou encore la
régression linéaire.
Pour le data scientist, l’objectif est d’aller plus loin dans les algorithmes d’analyse afin d'obtenir
un degré supérieur d'information, notamment grâce au machine learning.
Dans l’exemple ci-dessous, on représente le risque de désabonnement de clients selon deux
critères, Drivers A et Drivers B. Là où une analyse de donnée statistique classique (la courbe)
nous donne simplement une frontière de classification, on voit qu’un algorithme de machine
learning (les isobares) peut aller beaucoup plus loin et dépasser les contraintes de linéarité
pour fournir une réponse plus précise, avec une carte de risques.
En résumé
La data science est un nouveau domaine de travail, qui augmente les capacités d’analyse
classique, afin d’aider les entreprises à prendre des décisions informées. Elle s’appuie pour
cela sur des données utiles et ne peut s’appliquer que dans certaines problématiques précises.
Dans ce chapitre, nous allons prendre un peu de hauteur et observer en quoi consiste le cycle
habituel de travail des data scientists, pour comprendre à quelle étape intervient le machine
learning. C’est parti !
Récupérez les données
Une fois que vous êtes décidé à attaquer un problème, la première chose à faire est d'explorer
toutes les pistes possibles pour récupérer les données. En effet, les données constituent
l'expérience, les exemples que vous allez fournir à votre algorithme de machine learning afin
qu'il puisse apprendre et devenir plus performant.
Dans la suite du cours, j’appellerai les données étudiées, destinées à alimenter un algorithme
de machine learning, indifféremment dataset ou jeu de données.
Tout doit passer au crible ! Les bases de données existantes, des données brutes
alternatives (image, son, etc.), et même la création de nouveaux canaux d'acquisition de
données. Essayez de trouver l'ensemble des variables qui impactent de près ou de loin le
phénomène qui vous intéresse.
Vous trouverez ci-dessous quelques exemples où les data scientists ont redoublé d'ingéniosité
pour récupérer et utiliser leurs données de manière originale.
Exemple de reCAPTCHA
Détectez l'illettrisme par l'utilisation du smartphone
Un chercheur norvégien a utilisé plusieurs types de données mobiles (tels que les SMS, le
nombre de contacts, etc.) pour détecter les personnes illettrées dans les pays en voie de
développement.
Pour en savoir plus, vous pouvez consulter cet article de 2016 du site MIT Technology
Review.
Croisez les différentes sources de données
Dans beaucoup de cas, l’innovation en data science dans une entreprise vient de l’originalité
de l’utilisation des données et du croisement de différentes sources de données. Pour
cela, il faut dans l’idéal posséder une politique de gestion des données dans son entreprise la
plus transparente possible. Pour les données, c’est comme pour les ressources humaines : les
différents départements organisés en silos communiquent moins et innovent moins par rapport
à un environnement ou la transversalité est favorisée. Alors essayez d'éviter les data-silos !
Pour aller plus loin dans cette étape, consultez le cours Décrivez et nettoyez votre jeu de
données.
Une autre étape nécessaire en général est l’aggrégation de ces données dans un data lake.
Nettoyer les données signifie donc qu’elles sont toutes sous le même format, accessible au
même endroit et au bon moment.
Lorsque ces questions deviennent complexe, il faut faire appel au data architect qui, lui,
possède une maîtrise technique pour réaliser ces différentes tâches. Ces ingénieurs des Big
Datas sont responsables de la création et de l'administration de tous les systèmes techniques
qui vont permettre la bonne exploitation des données.
Si vous souhaitez en savoir plus sur cet aspect technique de la data science, OpenClassrooms
propose un parcours de formation de Data Architect.
L'important, c'est de bien préparer le terrain pour les étapes suivantes. Ces étapes seront
grandement simplifiées si ce travail fastidieux est bien effectué en amont.
Explorez les données
Les données bien propres peuvent maintenant commencer à être explorées. Cette étape vous
permet de mieux comprendre les différents comportements et de bien saisir le
phénomène sous-jacent.
C'est vraiment une étape à ne pas négliger, les meilleurs data scientists ne sont pas ceux qui
connaissent les algorithmes les plus complexes mais ceux qui ont une très bonne
connaissance des données, et ont préparé le terrain avec soin en amont.
1500 32
2120 65
2500 60
... ...
Bien sûr en réalité d’autres paramètres seraient probablement à prendre en compte (parties
communes, voisinage, évolution des loyers au cours du temps, etc). Le but est ici
d’appréhender un modèle simplifié afin de comprendre rapidement ce que veut dire "modéliser
un phénomène".
Si on affiche maintenant ces différents points sur un graphe qui représente le montant du loyer
en fonction de la surface, on obtient le graphique suivante :
L'intervalle de confiance (à 90 %)
C’est donc un jeu d’allers-retours entre modélisation et évaluation qui s’effectue pour obtenir les
performances les plus satisfaisantes possibles. Il est même possible dans certains cas de
remettre en question certaines hypothèses de départ et de repartir dans une phase
d’exploration pour mieux comprendre les données.
Comment ça fonctionne en pratique ? C’est assez simple, il vous suffit de récupérer les
paramètres de votre modèle et de faire passer la surface de l'appartement en entrée du
modèle, afin d’obtenir le loyer associé en sortie, en suivant la droite.
Imaginez qu'un appartement a une surface de 30 mètres carrés (point en rouge), une
estimation légitime du loyer se situerait aux alentours de 1300 euros selon notre modèle.
Pour des modèles plus complexes, le fonctionnement reste le même, si vous voulez appliquer
votre travail à de nouvelles données, il vous suffit de passer les nouvelles entrées dans votre
modèle (qui est en principe un ensemble de transformations des valeurs d’entrées) afin
d’obtenir une sortie.
Mais les experts du domaine sont formels : malgré toutes les inquiétudes évoquées dans les
médias, le machine learning, et de manière plus générale l'intelligence artificielle, ne constituent
pas une réelle menace. En l'état actuel, on est vraiment loin d'avoir atteint un niveau
d'intelligence suffisant chez les machines pour avoir de quoi s'inquiéter.
Dans ce cours, nous n'allons pas nous attarder sur l'aspect « éthique » du machine learning.
Pour en savoir plus sur le sujet, je vous conseille la rubrique dédiée sur le site future of life.
Une expérience récente effectuée par le MIT sur les voitures autonomes aborde la question de
la moralité, où ils font appel à l'intelligence collective pour entraîner la morale des
machines : moralmachine.mit.edu.
Le machine learning constitue, comme on l'a vu dans le chapitre précédent, une manière de
modéliser des phénomènes, dans le but de prendre des décisions stratégiques.
Même si c'est un outil très puissant quand il est bien utilisé, le machine learning n'est pas une
baguette magique. Il est important d'être clair sur ce point avec les collaborateurs avec qui vous
travaillez, afin de tempérer leurs attentes sur les résultats que vous allez obtenir.
Avant la modélisation
Comme nous l'avons vu dans la partie précédente, les étapes de travail d'un data scientist sont
les suivantes :
J'insiste, mais il est important de noter que le travail du data scientist comprend bien toutes les
étapes, de la récupération au déploiement. Une majorité du travail quotidien du data scientist
s'effectue même plutôt sur la récupération, le nettoyage et l'exploration de données que sur la
modélisation en elle-même. Il est donc sous-entendu dans la suite du cours que ces étapes
auront déjà été effectuées sur les données utilisées.
Un exemple concret
Un data scientist qui travaille dans le web a souvent la possibilité de récupérer les analytics du
site pour lequel il travaille (des informations sur les visites et le comportement des utilisateurs
sur le site). À partir de ces données brutes, il va sélectionner, nettoyer et transformer les
données pertinentes. Par exemple, au lieu de récupérer directement le nombre de visites
journalières, il va plutôt récupérer leurs variations d'un jour sur l'autre.
Il va ensuite explorer ces données pré-traitées, c'est-à-dire visualiser les différentes variables,
essayer de comprendre les comportements (les valeurs extrêmes ou aberrantes, les
corrélations, etc). Une fois qu'il a une bonne idée de ce à quoi il a affaire, il peut définir une
problématique plus précise à laquelle répondre.
Pour amener de la valeur ajoutées à partir de ces données, le data scientist pourrait effectuer
un classement des utilisateurs les plus susceptibles de revenir sur le site, ce qui permettrait
ensuite de cibler les utilisateurs les plus engagés par des campagnes marketing ciblées.
Une fois l'exploration faite et la question de recherche définie, le data scientist peut passer à
l'étape de modélisation...
L'étape de modélisation
Imaginez que vous êtes un data scientist. Vous êtes maintenant à l'aise avec l'ensemble des
données récupérées pour vos analyses. Vous avez une connaissance des objectifs principaux
de l'entreprise, ce qui vous a aidé à synthétiser les différentes variables qui interviennent, ainsi
que visualiser les différents comportements et corrélations présents au sein de ces données.
Voici un exemple de jeu de données images classique qui permet d'entraîner un modèle de
machine learning. Chaque image constitue une observation du data set.
Source : karpathy.github.io
Vous allez donc être responsables dans une première phase du choix et de l'entraînement
de l'algorithme d'apprentissage du modèle, mais le traitement de la tâche spécifique sera
appris à partir du training set et ensuite effectué par l'algorithme lui-même dans une seconde
phase.
Dans le schéma ci-dessous, vous pouvez voir les différentes étapes qui interviennent dans
l'utilisation d'un algorithme de machine learning. Vous serez responsable de la phase 1 et vous
pourrez ensuite simplement passer les données dans le modèle durant la phase 2.
Évidemment, ce n'est pas aussi séquentiel (on fait par exemple des allers-retours entre
apprentissage et analyse d'erreur).
Un détail des deux phases du process de machine learning
Une fois le modèle correctement paramétré sur les données d'entraînement, le data scientist
peut ensuite le déployer afin qu'il traite de nouvelles données, pour accomplir la tâche
spécifique poursuivie (prédiction, recommandation, décision...).
Comme on peut le voir sur le schéma ci-dessus, un problème d'apprentissage machine
comporte ainsi différents éléments spécifiques :
Les données
Nous l'avons déjà dit, les données constituent littéralement le nerf de la guerre de
la data science. 😉
Plus vous aurez une bonne compréhension de vos données, plus vous serez à même de
pouvoir les utiliser à bon escient lors de la phase d'entraînement de votre modèle statistique.
Nous allons rapidement donner une vue d'ensemble du type de données habituelles
rencontrées en machine learning.
Le deep learning, dont vous avez peut-être déjà entendu parler, regroupe les algorithmes et
modèles assez gros et complexes pour pouvoir traiter les données brutes directement, sans
pré-traitement. Pour les autres modèles, on devra souvent réduire la complexité des données
par des méthodes spécifiques à chaque type de donnée brute.
Le texte
Le texte libre, rédigé en langage naturel (humain), est ainsi une autre source de données
principale pour le travail de data scientist. Cela comporte tous les types de texte auxquels on
peut penser naturellement (articles, livres, messages, etc), mais aussi d'autres types de textes
tels que du code HTML ou encore des séquences d'ADN.
Les images sont aussi une des sources de captation de l'environnement souvent utile sur des
problématiques d'entreprise. Beaucoup d'entreprises ont des banques d'images à traiter pour
les classer par type ou autre.
Les objets connectés sont une autre source de données brutes, qui récupèrent un grand
nombre de données grâce à leurs capteurs. Un bon exemple est l'entreprise Nest, qui a utilisé
la data science pour créer un thermostat intelligent qui optimise la consommation d'électricité en
surveillant à la fois la température, la présence des habitants, etc.
Un exemple d'objet connecté : le thermostat intelligent de l'entreprise Nest (crédits : Nest)
La tâche à accomplir
La tâche spécifique à accomplir correspond au problème qu'on cherche à résoudre grâce à la
modélisation du phénomène. On peut distinguer un certain nombre de cas qui reviennent
souvent dans un environnement business, tels que les recommandations de produits par
exemple. Je vous ai aussi déjà cité l'identification de transactions frauduleuses,
la prédiction de l'impact d'une campagne marketing sur le taux de conversion, ou la prédiction
du prix optimal d'un produit pour maximiser le nombre de ventes.
L'algorithme d'apprentissage
L'algorithme d'apprentissage constitue la méthode avec laquelle le modèle statistique va se
paramétrer à partir des données d'exemple. Il existe de nombreux algorithmes différents ! On
choisira un type d'algorithme particulier en fonction du type de tâche que l'on souhaite
accomplir et du type de données dont on dispose. En gros, quelle est l'entrée de l'algorithme et
quelle est la sortie.
Quelques exemples d'algorithmes de machine learning, dont vous avez peut-être déjà entendu
parler :
La régression linéaire
K-nn
Les Support Vector Machine (SVM)
Les réseaux de neurones
Les random forests
etc.
La mesure des performances
Mesurer les performances fait partie intégrante du travail de modélisation. Il faut en général
déterminer une mesure principale, souvent spécifique à la tâche à accomplir. Le choix de cette
métrique est très important ! Vous allez comprendre pourquoi avec un petit exemple simple.
Exemple
Imaginez que vous voulez créer un algorithme de détection de fraudes bancaires. Vous voulez
mesurer à quel point votre programme est performant. Une manière de faire serait de mesurer
la proportion totale de transactions détectées comme fraude. Cependant, on compte ici les
transactions qui ne sont pas des fraudes et qui ont quand même été notées comme en
étant (appelé "faux positifs"). Donc, avec ce genre de métriques, on n'est pas exigeant sur ce
type d'erreur produit par notre algorithme. Il faut peut-être utiliser une autre métrique plus
pertinente. Par exemple, préciser la proportion de "vraies fraudes" détectées par rapport au
total de transactions détectées comme frauduleuses.
On voit donc qu'il faut bien réfléchir à une métrique plus pertinente pour être sûr de mesurer
correctement la qualité de son algorithme.
En résumé
Le machine learning est l'apprentissage d'un modèle statistique par la machine, grâce à des
données d'entraînement. Un problème de machine learning comporte plusieurs éléments
spécifiques :
Des données
Une tâche à accomplir
Un algorithme d'apprentissage
Une mesure des performances
En une phrase, un ordinateur apprend à partir de données pour résoudre une tâche en faisant
attention à mesurer les performances. S'il améliore les performances sur cette tâche
lorsqu'on lui fournit les données d'entraînement, on dit alors qu'il apprend.
Pour bien comprendre la différence, reprenons un exemple : supposez que vous avez
une nouvelle base de photos à catégoriser. Vous disposez de données d'exemple (training
set) préalables pour entraîner votre modèle.
Voici une visualisation de l'utilisation d'une méthode non supervisée qui regroupe les images
par similarité. Je vous conseille de regarder la version HD ici.
Visualisation 2D d'une méthode non supervisée qui permet de grouper les images par similarité
(crédits : http://cs.stanford.edu/people/karpathy)
Des chercheurs de Google Brain ont appliqué des algorithmes d'apprentissage non supervisés
il y a quelques années à des vidéos YouTube, afin de voir ce que cet algorithme réussirait à
apprendre comme information. Une vidéo explicative (en anglais) est disponible ici.
La représentation interne des concepts de "visage" et "chat" apprises par un algorithme non
supervisé à partir d'images extraites de millions de vidéos YouTube (crédits : Quoc V. Le et al.)
Une représentation un peu plus mathématique pout vous permettre d'éclaircir le concept :
En unsupervised learning, on reçoit uniquement des observations brutes de variables
aléatoires : x1,x2,x3,x4,... et on espère découvrir la relation avec des variables latentes
structurelles : xi→yi
En supervised learning, on reçoit des données d'exemple annotées : (x1,y1),(x2,y2),
(x3,y3),... et on espère prédire la sortie sur de nouvelles observations : x∗→y∗
Dans quel cas utilise-t-on l'un ou l'autre ?
Et bien dans le cas où vous avez un problème où vous pouvez annoter précisément pour
chaque observation la cible que vous voulez en sortie, vous pouvez utiliser l'apprentissage
supervisé.
Dans le cas où vous essayez de mieux comprendre votre dataset où d'identifier des
comportements intéressants, vous pouvez utiliser l'apprentissage non supervisé.
Il existe en fait deux autres familles d'algorithmes que nous ne détaillerons pas (peu utilisées
pour le moment en pratique), mais libre à vous de vous renseigner dessus :
Le semi-supervised learning qui prend en entrée certaines données annotées et
d'autres non. Ce sont des méthodes très intéressantes qui tirent parti des deux mondes
(supervised et unsupervised), mais bien sûr apportent leur lot de difficultés.
Le reinforcement learning qui se base sur un cycle d'expérience / récompense et
améliore les performances à chaque itération. Une analogie souvent citée est celle du
cycle de dopamine : une "bonne" expérience augmente la dopamine et donc augmente
la probabilité que l'agent répète l'expérience.
Régression ou Classification
Une autre distinction qui vous aidera dans le choix d'un algorithme de machine learning est le
type de sortie que l'on attend de notre programme : est-ce une valeur continue (un nombre) ou
bien une valeur discrète (une catégorie) ? Le premier cas est appelé une régression, le
second une classification.
Par exemple, si je veux déterminer le coût par clic d'une publicité web, j'effectue une
régression. Si je veux déterminer si une photo est un chat ou un chimpanzé, j'effectue une
classification.
Illustration de la différence entre classification linéaire et régression linéaire
Beaucoup d'algorithmes permettent en réalité d'effectuer ces DEUX types de tâches. Être
vigilant sur le type de tâche à réaliser permet cependant de structurer son approche et est à
prendre en compte comme une contrainte supplémentaire dans la construction du modèle.
Demandez-vous donc toujours si vous avez affaire à un problème de régression ou de
classification.
Il existe aussi un autre type de prédiction possible qui est de sortir plusieurs labels de manière
ordonnée (machine-learned ranking en anglais). Par exemple, l'algorithme PageRank de
Google retourne des résultats de recherche dans l'ordre, du plus pertinent au moins pertinent.
C'est simple, n'est-ce pas ?
Si c'est si simple que ça, pourquoi n'y a-t-il pas juste 3 ou 4 algorithmes, qu'on pourrait utiliser
pour chacune de ces distinctions ?
Vous avez raison, mais dans la vie rien n'est si simple. 😇
C'est sans mentionner qu'il existe d'autre types de distinction entre les familles d'algorithmes -
paramétrique ou non-paramétrique, génératif ou discriminatif, etc. Je n'ai présenté ici que
les distinctions principales qui nous seront utiles pour identifier nos différentes problématiques
et leurs solutions .
En résumé
Les problèmes de machine learning peuvent se différencier selon deux critères :
Les données dont vous disposez sont-elles annotées ou non ? Si c'est le cas, vous avez
affaire à un problème d'apprentissage supervisé. Sinon vous serez obligé d'utiliser un
algorithme d'apprentissage non supervisé.
Quel est le type de résultat que vous souhaitez prédire ? S'il s'agit d'un nombre (par
exemple le coût par clic d'une publicité), c'est un problème de régression. S'il s'agit
plutôt d'une valeur discrète, d'une catégorie (par exemple le type d'animal présent sur
une photo) alors c'est un problème de classification.
Transformez des besoins métiers en problèmes de
Machine Learning
Pour débuter cette deuxième partie, nous allons faire le pont entre les différentes catégories de
problèmes de machine Learning que vous venez de découvrir, et les différentes
problématiques métier auxquelles sont souvent confrontées les entreprises.
Autrefois à la charge de statisticiens, c'est maintenant souvent au data scientist qu’il incombe la
charge de noter les clients. Ce type de scoring s'effectue en général grâce à un certain nombre
de caractéristiques qui définissent le client (âge, genre, ville, etc.).
Pourquoi n'est-ce pas resté à la charge des statisticiens ? Qu'est-ce la data science peut faire
de plus ?
Une phrase résume très bien la distinction entre statisticien et data scientist :
Data Scientist : Une personne qui est meilleure en stat qu'un développeur, et meilleure en
programmation qu'un statisticien.
Disons que le débat est toujours ouvert, mais que pour faire simple, ce qui peut distinguer un
data scientist d'un statisticien, c'est sa capacité à mieux écrire du code et déployer des
algorithmes en production, et à l'inverse son attachement moins strict à la rigueur statistique
sous-jacente aux algorithmes.
CPC (coût par clic) : le coût d'un clic sur une publicité
Ce type de prédiction fait aussi appel à des méthodes de régression, puisqu'on essaie là
encore de prédire une valeur numérique.
Sur le graphe ci-dessous, on peut dire que le point rouge est trop éloigné de la droite de
modélisation et qu'il peut donc être considéré comme un outlier.
En effet, nous sommes typiquement ici dans une problématique de classification supervisée :
les produits déjà classés peuvent faire office de données d’entraînement et les caractéristiques
de produits, voire même directement les photos, peuvent servir de variable d'entrée pour notre
algorithme de classification.
En pratique, ce genre de segmentation automatique est très utile pour une qualification des
visiteurs d’un site, afin de leur recommander les produits appropriés notamment.
On peut choisir...
Une recommandation, c'est une proposition de contenu similaire aux produits qu'a déjà aimé
l'utilisateur. C'est la notion de similarité qui est donc à traduire.
Sur l'image ci-dessous, on regarde par exemple ce qu'ont voté les utilisateurs similaires, c'est-
à-dire ceux qui ont déjà voté la même chose sur d'autres produits (surlignés en vert). On peut
alors prédire ce qu'aurait voté notre utilisateur sur le produit cherché, et ne proposer que les
produits sur lesquels il aurait mis un pouce vert.
Les utilisateurs similaires (en vert) n'ont pas aimé le produit que notre utilisateur n'a pas encore
noté. L'algorithme aura donc tendance à prédire une mauvaise note et à ne pas recommander
le produit ici.
Il existe d'autres méthodes de recommandation qui dépendent du problème considéré...
Le clustering
Le clustering désigne les méthodes de regroupement automatique de données qui
se ressemblent le plus en un ensemble de "nuages", appelés clusters. Un ensemble
d'algorithmes non supervisés peuvent réaliser cette tâche. Ils mesurent donc de manière
automatique la similarité entre les différentes données. Par exemple, les points sur le graphe
ci-dessous peuvent être considérés comme similaires s'ils sont proches en termes de distance.
L'objectif du clustering est de retrouver les différents clusters de données, c'est-à-dire de
regrouper les données similaires entre elles.
Une fois que vous avez ces segments, rien ne vous empêche ensuite d'appliquer d'autres
algorithmes, supervisés cette fois. Par exemple, classer les nouveaux utilisateurs sur ces
segments. Ou bien encore, identifier les outliers car ils n'appartiennent raisonnablement à
aucun cluster.
En résumé
Vous avez vu quelques exemples de solutions de machine learning courantes à des
problématiques d'entreprises :
Pour résumer, R, créé en 1993, est le langage historique des statisticiens, métier qui
représente l’ancêtre de la Data Science. La transition s’est ainsi faîte naturellement et vous
trouverez votre bonheur dans ce langage en terme de fonctionnalités utiles au bon
développement de votre projet et des interfaces pour (quasiment) tous les outils que nous
évoquerons par la suite.
Une guerre sans pitié sévit sur internet depuis quelque temps pour déterminer lequel des
deux langages il faut utiliser notamment pour l’efficacité mais aussi (et surtout) pour des raisons
pratiques.
Avec l’expérience voilà ce que je peux vous dire pour vous aider à faire votre choix :
Si vous voulez vous orienter vers des professions qui sont fortement orientés
en Machine Learning (Machine Learning Engineer, Data Scientist à dominante Machine
Learning, etc.), faites du Python ! Tous les framework existants, les nouveaux
algorithmes sont écrits en Python. La communauté est aussi beaucoup plus importante
sur internet pour ces thématiques.
Si vous vous orientez vers un métier où les statistiques jouent un plus grand rôle (pour
faire des analyses exploratoires, des corrélations, etc.) Il est plus judicieux de travailler
sur R qui permet d’être très efficace sur ce terrain. Notamment pour un data analyst, R
constitue un très bon environnement de travail.
Dernier conseil, si vous savez dans quel secteur et activité vous souhaitez travaillez,
faites une recherche sur les demandes d’emploi dans ce métier et les préférences quand
au langage qui sera précisé dans la description. Vous aurez une bonne idée de la
demande quand à ce sujet.
Et pour les cours OpenClassrooms, quel langage est utilisé ?
Ce cours (et les autres du parcours Data Scientist) étant orienté principalement Machine
Learning, on utilisera le langage Python. R intègre la plus grande partie des algorithmes que
nous allons évoquer dans les prochains cours du parcours, et des wrappers quand ce n’est pas
le cas (par exemple pour le deep learning) mais dans une optique métier à la fin du
parcours, on favorisera l’utilisation de Python.
Pour récupérer des données texte depuis des pages internet, vous devrez utiliser un outil
de scraping comme scrapy en python par exemple
Si vous avez accès à des données structurées comme SQL, ils ont en général leur
propre syntaxe de récupération. C'est en général le cas pour la majorité des boîtes
Il existe des hub de jeu de données publics qui peuvent parfois être utiles ou pour
s'entraîner - allez faire un tour sur ce site pour avoir une idée
De manière générale, si vous travaillez dans une boîte très centrée sur les données, ce ne sera
pas votre travail que de consolider cet accès et récupération des données, mais celui du data
architect, qui vous créera un datalake comme point d'entrée unique.
En revanche, dans tous les cas, gardez l'oeil ouvert pour tout nouveau canal de récupération de
données qui peuvent aider à résoudre votre problème, quitte à ajouter de nouveaux capteurs
par exemples, ou être original sur le type de données générées comme présenté dans le
chapitre précédent.
pandas pour créer des tableaux (ou "Dataframe") à partir de vos données brutes,
numpy pour gérer des matrices,
matplotlib pour générer des graphiques,
iPython pour les feuilles de calculs,
Bien sûr, il en existe encore d'autres !
Utilisation de la librairie Maplotlib pour générer un graphique
Cette famille de librairies est très utilisée et sert en réalité de base à beaucoup de frameworks
de Machine Learning que nous allons utiliser par la suite. Nous allons les employer pour les
cours du parcours Data Scientist d'OpenClassrooms.
Si vous n’êtes pas familiers avec ces librairies, je vous invite à consulter le cours Découvrez
les librairies Python pour la Data Science.
La phase de modélisation (et l'évaluation)
Ici on rentre dans le vif du sujet pour le Data Scientist, et pour ce cours, c’est à dire le Machine
Learning et le travail de modélisation.
Ici à nouveau, la guerre fait rage. Torch, Theano, Caffe mais surtout Tensorflow et Scikit-
Learn sont les librairies les plus utilisés pour la modélisation. Dans ce cours, le choix a été fait
d’utiliser Scikit-learn car il est plus facile d’accès et implémente directement et de manière
didactique les différents algorithmes d’apprentissage automatique que nous allons étudier.
Cependant comme évoqué précédemment, cette partie peut rapidement s’avérer laborieuse
lorsqu’on travaille dans un environnement réel. La quantité de données, la rapidité d’exécution
des calculs, la tolérance aux pannes sont autant d’exigences qui nécessitent de s’appuyer
sur des outils robustes et spécialisés.
L'éco-système Hadoop est très fourni et répondra à tous vos besoins pour la mise en
production
Alors je peux suivre les cours d’OpenClassrooms sans utiliser de librairie de Machine
Learning, simplement à l’aide d’une API ?
Bonne question ! La majorité du parcours Data Scientist se concentre sur le fonctionnement des
algorithmes qui sont présentés, et non sur leur implémentation. Vous pourrez donc suivre les
cours sans utiliser de framework code. Mais si vous souhaitez faire le parcours, vous devrez
utiliser les outils spécialisés pour implémenter vous même les algorithmes !
En résumé
Pour chaque étape du travail du Data Scientist, il est important de se munir d’outils efficaces,
mais surtout avec lesquels vous êtes à l’aise. Retenez aussi que le Machine Learning et la
Data Science sont avant tout composés de concepts à appréhender correctement,
indépendamment des outils de travail choisis.
Et forcément, parce qu’on fait une approximation, on a une perte d’information qui est un bruit
non modélisé et qu’on estime indépendant (c’est-à-dire non représentatif du phénomène).
Ici, on voit facilement qu'on peut approximer le phénomène à l'origine des données par un
cercle.
Le modèle sous-jacent (statistique) représente une contrainte de “forme” non
dépendante des données.
Par exemple, si je décide d’effectuer une régression linéaire, je contrains mon modèle à avoir la
forme d’une droite, pas d’un cercle. Malgré tous mes efforts, je ne pourrai alors pas obtenir
d’autres formes qu'une droite pour modéliser mes données, c’est donc un choix très important !
Cette notion de complexité/contrainte/flexibilité est primordiale dans votre travail de
modélisation. 🙂
Comme on peut le voir sur ce genre de données, c'est difficile (impossible) de faire fitter une
droite ! Le type de modèle est mal choisi.
Une fois ce choix effectué et les contraintes posées, la question d’apprentissage est alors
équivalente à construire le fameux modèle qui se rapprochera le plus des données d’exemples.
Les modèles sont le plus souvent représentés par un ensemble de paramètres qu'on
mettra dans un vecteur θ. Par exemple, une droite peut être représentée par l'équation y=θTx.
On parle alors de modèle paramétrique, et l'apprentissage du modèle revient dans ce cas à
trouver la valeur optimale de θ.
La grande majorité des algorithmes d’apprentissage supervisés utilisent cette fonction de perte !
L'apprentissage se résume en fait souvent à une méthode itérative qui converge vers un
minimum de cette fonction. Plus la perte d'information diminue, plus on se rapproche de la
réalité, et meilleur est notre modèle.
On peut retrouver beaucoup de types de perte. Je vais vous en présenter deux ici, pour vous
donner une idée des types d'approches qu'on peut avoir.
À gauche, on ne perd pas trop d'information. À droite par contre, on est trop éloigné de la réalité
représentée par les points.
La distance la plus utilisée pour mesurer cet éloignement est l’erreur quadratique (la distance
euclidienne entre un point et le modèle).
Souvent, on ne peut pas calculer directement l’erreur mais on va utiliser une approximation à
partir des données qui sont notre seule ressource. 😐 On va ainsi sommer sur toutes nos
données d’exemples l’erreur effectuée du modèle. On appelle cette erreur le risque empirique.
Le risque empirique peut paraître sorti du chapeau. Ce n'est pas entièrement faux, car il
représente un proxy pour une erreur réelle qu'on aimerait bien pouvoir mesurer. 😢
Si ça vous intéresse, il existe tout un domaine d'étude appelé statistical learning theory qui
permet de creuser un peu plus le fonctionnement de ce genre d'approximation d'erreur.
Cette erreur du modèle utilisée pour l'optimisation est à ne pas confondre avec celle utilisée lors
de l'évaluation des performances, qui utilisera d'autres mesures pour étudier la qualité finale du
modèle.
Pour ceux qui veulent en savoir plus sur ce lien entre maximiser la vraisemblance et minimiser
une erreur, vous pouvez aller voir cet article (en anglais).
Ce domaine des mathématiques, appelé optimisation convexe, est très intéressant. Il peut vous
aider lorsque vous travaillez avec des algorithmes à anticiper si les méthodes utilisées ont des
chances de converger, mais c’est aussi une des pierres angulaires de la création de nouveaux
algorithmes. Pour aller plus loin, je vous conseille notamment ce cours d'optimisation orienté
apprentissage statistique. Attention, solides pré-requis en maths conseillés. 🤓
D'accord mais en pratique, qu'est-ce que j'aurai à faire en tant que data scientist ?
En pratique, les algorithmes d’optimisation sont déjà implémentés dans les librairies que vous
utiliserez (par exemple dans scikit-learn que j'utilise dans ce cours), et sont intégrés au modèle
que vous voudrez créer. Toutes les notions abordées dans ce chapitre sont donc encapsulées
dans des fonctions, que vous aurez juste à appeler en leur passant vos données
d’entraînement.
Cependant, vous aurez souvent besoin de paramétrer ces algorithmes d’optimisation, ou même
les hyperparamètres du modèle, c’est donc important de savoir dans quoi on met les mains. 😉
En résumé
Pour construire un modèle, on part d'une hypothèse de départ qui représente l'ensemble
des formes que peut prendre notre modélisation (une courbe par exemple, mais ça peut
être bien d'autres choses encore).
En apprentissage supervisé, on cherche ensuite à trouver le modèle optimal à l'aide des
données d'entraînement. Cela consiste à faire converger une mesure appelée loss
function (fonction de perte) en utilisant des techniques d'optimisation numérique.
Deux exemples de fonctions de perte souvent utilisées en apprentissage supervisé
sont le risque empirique et le maximum de vraisemblance.
Les algorithmes de machine learning sont en fait une combinaison de plusieurs
domaines d'études : les statistiques (statistical learning theory), l'optimisation numérique,
l'informatique théorique, etc.
Je vous recommande aussi d’utiliser un notebook Jupiter, pratique pour afficher vos résultats au
fur et à mesure directement dans un navigateur web.
Imaginons pour l'instant que la seule caractéristique dont nous disposons est la surface de
l'appartement. Notre training set est un ensemble de N = 545 observations de surface et leur
loyer associé : (x,y)=(surface,loyer) .
Ce sont des données réelles que j'ai récupéré sur des sites de location, pour quelques
arrondissements parisiens. J'ai enlevé quelques points aberrants (notamment sur les surfaces
trop grandes). On peut donc se concentrer sur la modélisation.
Vous pouvez télécharger ce training set ici.
Commençons par charger et afficher les données d'entraînement, juste pour avoir une meilleure
idée de ce à quoi on a affaire :
# On importe les librairies dont on aura besoin pour ce tp
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# On charge le dataset
house_data = pd.read_csv('house.csv')
Aussi, on peut voir que lorsque la surface devient un peu trop grande, les données semblent
devenir moins modélisables facilement, il y a plus de variabilité. On va considérer pour l'instant
résoudre le problème de prédiction pour les loyers inférieurs à 10,000€, afin de conserver une
robustesse du modèle à ces données plutôt anormales, qui correspondent peut être à un autre
modèle distinct ou un traitement comme outliers.
Nous avons donc notre contrainte de modèle sous-jacent qui doit être sous la forme y^=xTθ
avec xT=(x1,x2,x3,...,xN),y^T=(y1^,y2^,y3^,...,yN^)
Où N est le nombre d'observation à notre disposition (id est le nombre d'appartements
considérés dans notre cas).
E=∑Ni=1||xTiθ−yi||2
Et on va donc chercher à trouver le θθ qui minimise cette fonction de perte (qu’on note E) :
θ^=argminθE
Apprentissage : trouvez le θ optimal
Pour la régression linéaire, la solution de l'équation de minimisation (juste au-dessus) est
exacte :
θ^=(XTX)−1XTy
Détails de la solution
On cherche à minimiser la fonction E en fonction de theta. La fonction est convexe (c’est une
somme de carrés), donc elle possède un optimum global (en l’occurence un minimum), qui se
trouve à l’endroit où la dérivée première en theta est nulle. Pour les détails de la démonstration,
il en existe pléthore en ligne, par exemple ici (en anglais).
Pourtant vous parliez, dans le chapitre précédent, d'algorithme itératif qui convergeait vers une
solution non ? Là on a une solution exacte directement en fait ?
Alors en l’occurence on a de la chance. 😅 Il existe bien une solution exacte dans ce cas précis,
qu’on vient de donner. Mais on peut aussi utiliser un algorithme appelé descente de
gradient pour trouver une approximation de la solution. C'est en particulier utile lorsqu'on a
beaucoup de données d'exemples, car c'est assez long pour un ordinateur de calculer la
solution exacte ci-dessus (on calcule un inverse de matrice, ce qui n'est pas gratuit en temps de
calcul !).
loyer=30.7×surface+266.4
On peut représenter graphiquement la droite qu'on a trouvée pour vérifier qu'elle colle bien aux
données :
plt.xlabel('Surface')
plt.ylabel('Loyer')
plt.plot(house_data['surface'], house_data['loyer'], 'ro', markersize=4)
# On affiche la droite entre 0 et 250
plt.plot([0,250], [theta.item(0),theta.item(0) + 250 * theta.item(1)], linestyle='--', c='#000000')
plt.show()
theta.item(0) + theta.item(1) * 35
On obtient une estimation du loyer :
1339.646166
Essayez avec n'importe quelle surface !
Que se passe-t-il si :
on change l’hypothèse de linéarité (une droite) et qu’on en prend une autre (un polynôme
du second degré par exemple) ?
on teste le modèle avec d’autres types d’erreurs que la distance euclidienne ?
on ajoute des features (dimensions) supplémentaires en entrée ?
au fur et à mesure que la surface augmente, les données ont l'air d'être de plus en plus
"éparses" : comment intégrer ce comportement dans ma modélisation ?
Toutes ces questions peuvent (et devraient !) être testées. Trouver la configuration la plus
pertinente revient du coup à tester les différents modèles (régression linéaire ou non linéaire,
dimensions différentes, et tous les autres algorithmes que l'on verra par la suite) qui en
découlent et trouver celui qui convient le mieux en termes de performance...
Le k-NN est le diminutif de k Nearest Neighbors. C’est un algorithme qui peut servir autant
pour la classification que la régression. Il est surnommé « nearest neighbors » (plus proches
voisins en français) car le principe de ce modèle consiste en effet à choisir les k données les
plus proches du point étudié afin d’en prédire sa valeur.
J’ai choisi volontairement cet algorithme car il est assez simple d’un point de vu conceptuel et illustre
parfaitement les problématiques classiques qui en découlent. Mais attention, en pratique, cet algorithme
est assez peu utilisé dans sa forme première car coûteux en puissance de calcul.
Comment fonctionne le modèle k-NN ?
Avant d'utiliser un vrai jeu de données, on va prendre un petit exemple visuel afin de
comprendre le fonctionnement de l'algorithme.
Ci-dessous j'ai représenté un jeu de données d’entraînement, avec deux classes, rouge et bleu.
L'input est donc bidimensionnel ici, et la target est la couleur à classer.
On a donc une dimension supplémentaire par rapport à l'exemple sur la régression linéaire (qui
avait une seule dimension en entrée : la surface du logement).
Les deux zones qui séparent l'espace pour la décision à prendre sur la classification de
nouvelles entrées avec le modèle 5-NN
Voilà, ce n’est pas plus compliqué que ça !
Si le téléchargement des données échoue, vous pouvez télécharger à la main le fichier mnist-
original.mat et le placer dans un dossier qui s'appelle mldata . Ensuite, demandez à sklearn
de le charger depuis un emplacement local avec mnist = fetch_mldata('MNIST original',
data_home=location) , où location est l'adresse du répertoire où est placé le répertoire mldata.
L'objet mnist contient deux entrées principales, data et target , on peut les afficher :
# Le dataset principal qui contient toutes les images
print (mnist.data.shape)
# Le vecteur d'annotations associé au dataset (nombre entre 0 et 9)
print (mnist.target.shape)
(70000, 784)
(70000,)
data contient les images sous forme de tableaux de 28 x 28 = 784 couleurs de pixel en
niveau de gris, c'est-à-dire que la couleur de chaque pixel est représentée par un
nombre entre 0 et 16 qui représente si c'est proche du noir ou pas (0 = blanc, 16 = noir).
target qui contient les annotations (de 1 à 9) correspondant à la valeur "lue" du chiffre.
On dit ici que le nombre de features (ou dimensions) en entrée est de 28 x 28 x 1 = 784. Dans
le cas où on aurait utilisé des images couleur et pas en niveaux de gris, on serait passé à 3
composantes couleurs par pixel (rouge, vert, bleu) et donc le nombre de features aurait été : 28
x 28 x 3 = 2352.
Echantillonner pour faciliter le travail
Le dataset est relativement petit mais pour le modèle k-NN, il est déjà trop gros pour obtenir
rapidement des résultats. On va donc effectuer un sampling et travailler sur seulement 5000
données :
sample = np.random.randint(70000, size=5000)
data = mnist.data[sample]
target = mnist.target[sample]
Cette manière de "sampler" le jeu de données est dans l'absolu inexacte. En effet, le tableau
d'indices générés par randint peut contenir des doublons, ce qui nous conduit à avoir des
doublons dans nos données. Comme nous ne prenons que 5000 échantillons sur 70000, le
risque est plutôt faible. Pour faire ce travail de manière rigoureuse, regarder la fonction
sklearn.utils.resample .
J'ai ici appelé les images d'exemple "X" et les annotations cibles "y" :
from sklearn.model_selection import train_test_split
xtrain, xtest, ytrain, ytest = train_test_split(data, target, train_size=0.8)
Je le rappelle, on va utiliser uniquement le training set pour entraîner notre modèle et on garde
le testing set pour plus tard. J'ai mis la répartition classique 80/20 entre training et testing set.
Le k-NN
On peut créer un premier classifieur 3-NN, c'est-à-dire qui prend en compte les 3 plus proches
voisins pour la classification. Pour cela, on va utiliser l'implémentation de l'algorithme qui existe
dans la librairie scikit-learn :
from sklearn import neighbors
knn = neighbors.KNeighborsClassifier(n_neighbors=3)
knn.fit(xtrain, ytrain)
Comme je l'ai dit plus haut pour le k-NN, l'algorithme ici n'effectue aucune optimisation, mais va
juste sauvegarder toutes les données en mémoire. C'est sa manière d'apprendre en quelque
sorte.
La performance exacte de notre modèle dépend du jeu de sélection. N'hésitez pas à lancer
plusieurs fois ce traitement en changeant les jeux de données d'apprentissage et de test pour
vous en rendre compte.
Comme je l'ai dit, le k (nombre de voisins) est l'hyper-paramètre que l’on va chercher à
optimiser pour minimiser l’erreur sur les données test.
A titre d'exemple, vous pouvez afficher les prédictions du classifieur sur quelques données.
# On récupère le classifieur le plus performant
knn = neighbors.KNeighborsClassifier(4)
knn.fit(xtrain, ytrain)
# On récupère les prédictions sur les données test
predicted = knn.predict(xtest)
# On redimensionne les données sous forme d'images
images = xtest.reshape((-1, 28, 28))
# On selectionne un echantillon de 12 images au hasard
select = np.random.randint(images.shape[0], size=12)
# On affiche les images avec la prédiction associée
fig,ax = plt.subplots(3,4)
for index, value in enumerate(select):
plt.subplot(3,4,index+1)
plt.axis('off')
plt.imshow(images[value],cmap=plt.cm.gray_r,interpolation="nearest")
plt.title('Predicted: {}'.format( predicted[value]) )
plt.show()
N’hésitez pas à entraîner ce modèle à votre tour sur d’autres jeux de données !
Annexe
Tout le monde a déjà entendu parler de l’algorithme de descente de gradient, mais… savez-vous vraiment comment
ça marche et l’avez-vous déjà implémenté par vous-même pour être sûr d’avoir bien compris comment ça marche ?
Utiliser des modules qui font les calculs pour nous, c’est cool.
Comprendre ce qu’on manipule, c’est mieux !
C’est ce qu’on va faire dans cet article, en trois étapes :
1. La descente de gradient, qu’est-ce que c’est ?
2. Comment ça marche ?
3. Et quels sont les pièges à éviter ?
C’EST QUOI LA DESCENTE DE GRADIENT ?
Il s’agit d’un algorithme permettant de trouver le minimum d’une fonction.
C’est une problématique qu’on retrouve partout en mathématiques.
Et en data science, c’est aussi le cas, surtout quand on veut trouver l’estimateur du maximum de vraisemblance.
Ce qu’on fait tout le temps.
Ah oui, et trouver un minimum, c’est la même chose que trouver un maximum, il suffit juste de changer le signe.
Quand on est au lycée, pour trouver le minimum d’une fonction, on fait autrement, on :
Calcule la dérivée première.
On résout l’équation dérivée égale à 0 pour trouver les points d’inflexion.
On calcule la dérivée seconde en ces points. Quand elle est positive, c’est un
minimum. Quand elle est négative, c’est un maximum.
Quand on manipule des expressions tellement compliquées que ça devient impossible à résoudre.
Typiquement quand on fait du machine learning ou du deep learning.
La descente de gradient offre une approche :
algorithmique
itérative
Si la dérivée est égale à 0, c’est tout plat. C’est le cas au minimum par
exemple.
On pourrait, dans ce cas, faire le calcul de la dérivée égale à 0, mais le but c’est de comprendre la descente du
gradient, donc c’est ce qu’on va faire.
Il y a 3 étapes :
slope = df(x[0])
slope
# -5.47827
On a donc une pente négative égale à −5.23913.
Troisième étape : On avance dans la direction opposée à la pente : x1= x0−α∗f′(x0).
Comment choisir la valeur de α ?
Je propose pour le moment de tester une petite valeur α=0.05, et on testera d’autres valeurs un peu plus tard.
alpha = 0.05
x.append(x[0] - alpha * slope)
x[1]
# -0.72609
On a notre nouvelle valeur pour notre point ! Affichons-le :
Cette approche est itérative, ça veut dire qu’il va falloir répéter plusieurs fois l’opération pour arriver au minimum.
Recommençons :
x.append(x[1] - alpha * df(x[1]))
x[2]
# -0.40250
On avance doucement.
Après un peu plus d’une dizaine d’itérations, notre algorithme converge :
x = [-1.]
for i in range(20):
x.append(x[i] - alpha * df(x[i]))
x
# [-1.0, -0.7260866373071617, -0.4024997370140509, -0.08477906213634434,
# 0.18205499002642517, 0.39684580640116923, 0.5797318757542436,
# 0.7511409760238664, 0.929843593497496, 1.1379425635322518,
# 1.4100262396071885, 1.8111367982460322, 2.4659523010837896,
# 3.481091120446543, 3.9840239754024296, 3.5799142362878964,
# 3.9342838641256046, 3.6341484369757358, 3.900044342976242,
# 3.670089111844099, 3.8747793435314155]
Notre petite boule finit par arriver au minimum et à y rester, à environ x=3.8.
LES PIÈGES À ÉVITER
Bon.
Là, on a vu le principe de la descente de gradient.
Sur un exemple simple.
Mais en vrai il arrive souvent qu’on rencontre des problèmes. Par exemple :
J’ai dû accélérer l’animation, puisque cette fois-ci, au lieu d’arriver au minimum en 15 itérations, ça prend cette
fois-ci 75 itérations, soit 5 fois plus de temps !
Pour notre problème simple, l’impact est faible, mais quand on entraîne des réseaux de neurones, ça fait une grosse
différence en temps de calcul !
Malheureusement, il n’y a pas de recette miracle pour trouver le taux d’apprentissage parfait.
f(x)=xcos(x)
Le problème de cette fonction est qu’il y a beaucoup de minima locaux, c’est-à-dire des creux, qui ne sont pas le
minimum global (qui, sur cet intervalle, se trouve à droite, autour de x=9.5)
L’animation suivante montre quelques exemples où je fais varier le point initial :
On s’aperçoit que le point de convergence dépend énormément du point initial.
Parfois il va arriver à trouver le minimum global, et d’autres fois, l’algorithme va rester coincé dans un minimum
local.
Une technique pour éviter ce problème consiste justement à faire tourner l’algorithme plusieurs fois, et de garder le
plus petit des minima, mais évidemment c’est plus gourmand en calculs.
the algorithm works mathematically and textually. If you are really lucky you might find a pseudocode description of the
algorithm.
If you are really really lucky you might find some suggested ways to configure the method for different situations. These
descriptions are rare and typically buried deep in the original publication or in technical notes by the original authors.
A fact you learn quickly when you want to implement a method from research papers is that algorithms are almost never
described in sufficient detail for you to reproduce them. The reasons vary, from the micro-decisions that are left out of the paper,
to whole procedures that are summarized ambiguously in text, to symbols that are used inconsistently.
Piece it Together
To understand an algorithm you have to piece together an understanding yourself from disparate descriptions. This is the only
authoritative secondary interpretations made of original descriptions in review papers and books.
It is common for there to be prototype implementations of a method released with the primary sources and reading this code
(typically C, FORTRAN, R or Matlab) can be very enlightening for the details you need to reproduce an algorithm.
Algorithm Descriptions
An algorithm is an island of research and in all reality it can be difficult to pin down the canonical definition. For example, is it the
version described in the primary source or is it the version that includes all the fixes and enhancements that are “best practice”.
A solution is to consider a given algorithm from multiple perspectives, each of which can serve a different purpose. For example,
the abstract information processing description of the algorithm could be realized by a variety of different specific computational
implementations.
I like this approach because it defends the need to telescope in on a specific case of the algorithm from many possible cases at
each step of the description while also leaving the option open for the description of variations.
There are many descriptions you could use of varying specificity depending on your needs. Some that I like to use include:
inspiration for the algorithm, metaphor or analogy for the strategy, information processing objectives, pseudocode and code.
Algorithm Prescriptions
When I started my own research projects, I thought the answer to this problem was to read everything on an algorithm and
create the definitive implementation in code. Nice idea perhaps, but code is just one way to communicate an algorithm, and it is
limited.
There is more to an algorithm description than the computation. There is meta information around an algorithm that can be
For example, usage heuristics for an algorithm are embedded in papers. Having a summary of usage heuristics collected
together in one place can mean the difference of getting a good enough result quickly and running sensitivity analysis on the
Other examples include the standard experimental datasets used to test the algorithm, the general classes of problem to which
the algorithm is suited, and known limitations that have been identified and described for the algorithm.
An algorithm description template provides a structured way for you to learn about a machine learning algorithm.
You can start with a blank document and list out the section headings for the types of descriptions you need of the algorithm, for
To figure out what sections to include in your template, list out questions you would like to answer about the algorithm, or
algorithms if you are looking to build up a reference. Some questions you could use include:
What is the standard and abbreviations used for the algorithm?
What is the information processing strategy of the algorithm?
What is the objective or goal for the algorithm?
What metaphors or analogies are commonly used to describe the behavior of the algorithm?
What is the pseudocode or flowchart description of the algorithm?
What are the heuristics or rules of thumb for using the algorithm?
What classes of problem is the algorithm well suited?
What are common benchmark or example datasets used to demonstrate the algorithm?
What are useful resources for learning more about the algorithm?
What are the primary references or resources in which the algorithm was first described?
Once you have settled on some questions, turn them into section headings.
For each section heading clearly define the requirements of the section and the form that the description in that section will take.
I like to include motivating questions for each section that once answered will satisfy the section at the minimum level of detail.
resources that mention the algorithm, you can start to capture notes about an algorithm in the template.
You can start really simply and collect high-level descriptions of the algorithm, its names and abbreviations and the resources
you have found and what they talk about. From here you can decide to expand the description further, or not.
You will end up with a one-to-two page description of the algorithm very quickly.
I Use It
I’ve been using algorithm templates for a long time. Some examples where I have found this strategy practically useful include:
Implementing machine learning algorithms using a descriptive-focused template.
Applying a machine learning algorithm using an applied-focused template.
Building a catalog of algorithms to use and refer to using a general purpose template.
In this last case, I turned my catalog into a book of 45 nature inspired algorithms which I published in early 2011. The book is
Summary
In this post you learned about using an algorithm description template as a strategy for learning a machine learning algorithm.
You learned that algorithm descriptions are broken and the answer to learning an algorithm effectively is to design an algorithm
template that meets your needs and to fill in the template as you read and learn about the algorithm.
You learned that the template is an efficient and structured way to tackle an overwhelming problem.