100% ont trouvé ce document utile (1 vote)
513 vues54 pages

Machine Learning

Transféré par

Tambokto Brains
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOC, PDF, TXT ou lisez en ligne sur Scribd
100% ont trouvé ce document utile (1 vote)
513 vues54 pages

Machine Learning

Transféré par

Tambokto Brains
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOC, PDF, TXT ou lisez en ligne sur Scribd
Vous êtes sur la page 1/ 54

Découvrez le domaine de la Data Science

La data science (ou science des données en français) et le machine learning (ou


apprentissage automatique) sont deux mots très en vogue lorsque l'on parle de la révolution
Big Data, de prédiction des comportements ou tout simplement de la transformation numérique
des entreprises. Et comme pour tous les domaines innovants, il est parfois difficile de s'y
repérer.

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.

Le besoin d'un data scientist est apparu pour trois raisons principales :

 L'explosion de la quantité de données produites et collectées par les humains,


 L'amélioration et l'accessibilité plus grande des algorithmes de traitement des données,
 L'augmentation exponentielle des capacités de calcul des ordinateurs.
Pour reformuler, l’objectif est de récupérer des données de plusieurs sources différentes, et
d’en extraire des informations qui vont servir l’entreprise, notamment l’aide à la décision
(“data-driven decision”). Une entreprise qui a bien intégré la data science sera capable de
pondérer les intuitions humaines à l’aide des nouvelles informations suggérées par les données
qu’elle possède.

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.

Tout commence par des données


Cela paraît évident, les données constituent la ressource principale pour qu'un data
scientist puisse effectuer son travail correctement. Après tout, c'est tout de même le “data”
de "data science".
Donc si dès le départ, vous ne voyez aucune manière de récupérer des données liées au
problème que vous cherchez à résoudre, considérez que vous ne pourrez n’être d’aucune aide
sur ce problème, en tant que data scientist.

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. 🤓

Une problématique bien définie


Il existe un spectre assez large de problématiques que l'on peut résoudre en data
science. Mais vous pouvez aussi facilement en exclure un certain nombre, surtout si vous vous
trouvez dans un milieu d'entreprise, avec des contraintes de temps fortes pour produire des
résultats.

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.

Vous pouvez  donner des exemples de problématiques “bien définies” ?


Bien sûr ! Voici quelques exemples que l'on peut estimer réalistes :

 Prédire les ventes d'une campagne marketing.


 Identifier si une image est déjà présente dans une banque d'image existante.
 Segmenter les utilisateurs d'un site en plusieurs groupes en fonction de leur
comportement sur le site.
Data Science et analyse de données
En quoi la data science se distingue de l’analyse de données classique ? On a vraiment besoin
de ce nouveau domaine ?
Le machine learning se distingue dans un premier temps par l’approche utilisée pour résoudre
la problématique - la notion d’apprentissage - que l'on va étudier dans la suite de ce cours.

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.

Modélisation du risque de désabonnement de client d'une entreprise de télécommunication

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.

Plongez-vous dans la peau d’un Data scientist


Le machine learning ne désigne en réalité qu’une partie du travail d’un data scientist. C'est
pourquoi avant de rentrer dans le vif du sujet et de ne parler que de la partie machine learning,
je vous propose de faire un tour rapide du métier de data scientist, afin de se situer.

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 !

Appréhendez le cycle de travail du data scientist


Le cycle de travail du data scientist peut se résumer par le schéma ci-dessous. Pour faire
simple, on part de la réalité, on récupère les données, on les nettoie, on les explore puis on
utilise nos algorithmes pour créer de l’intelligence (artificielle) qui aide à la décision. Dans la
suite, nous allons détailler ces différentes étapes et voir quels sont les différents métiers sur la
chaine de traitement de la donnée.
Cycle de travail du data scientist

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.

Les images satellites pour évaluer le niveau de pauvreté


Des chercheurs ont utilisé le machine learning pour pouvoir cartographier les zones de
pauvreté de manière automatique, simplement à partir d'images satellites !
Une cartographie de l'estimation de la consommation moyenne quotidienne (crédits : Neal Jean
et al.)
Les CAPTCHAs pour la digitalisation automatique de livres
Luis von Ahn, entrepreneur et chercheur, a créé un célèbre système de reCAPTCHA qui
permettait à la fois aux sites web de valider que les formulaires étaient bien remplis par des
humains, et qui alimentait en même temps la base de données d'un algorithme de digitalisation
de livres. Grâce aux nombreux exemples renseignés directement par des humains, l'algorithme
a fini par avoir suffisamment de données d'exemples pour réussir ensuite seul à retranscrire en
texte des images scannées de livres, avec un taux d'erreur très faible.

Pour en savoir plus, vous pouvez consulter le site du projet.

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 !

Nettoyez les données


Une fois les données trouvées, il faut passer à l'étape de nettoyage. Pour ne rien vous cacher,
ce n'est pas l'étape la plus agréable du travail, mais ça ne la rend pas moins indispensable.

Nettoyer les données, c'est s'assurer qu'elles sont consistantes, sans valeurs


aberrantes ni manquantes.

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.

À la fin de l’exploration, vous devrez être en mesure de :

 Proposer plusieurs hypothèses sur les causes sous-jacentes à la génération du dataset :


"suite à l'exploration, il y a clairement une relation entre X et Y".
 Proposer plusieurs pistes de modélisation statistique des données, qui vont permettre de
résoudre la problématique de départ considérée.
 Proposer si nécessaire de nouvelles sources de données qui aideraient à mieux
comprendre le phénomène.
C'est dans les phases de nettoyage et d'exploration des données que les data scientists
passent le plus clair de leur temps.
Lorsque on a simplement besoin de comprendre ses données et les explorer, on peut faire
appel à un data analyst. Ou bien un data analyst peut effectuer des études préliminaires avant
de laisser le travail de modélisation au data scientist. Si vous souhaitez vous former à ce
métier, OpenClassrooms propose un parcours de formation de Data Analyst.
Modélisez les données à l'aide du machine learning
Nous pouvons enfin rentrer dans la partie la plus intéressante du métier, c’est à dire la création
du modèle statistique associé aux données qui nous intéressent ! C'est ce qu'on
appelle machine learning (ou apprentissage automatique). 

Mais ça veut dire quoi “modélisation statistique des données” ?


En machine learning et en data science plus généralement, l'objectif est de trouver un modèle
(stochastique ou déterministe) du phénomène à l'origine des données. C'est-à-dire qu'on
considère que chaque donnée observée est l'expression d'une variable aléatoire
générée par une distribution de probabilité.

Si vous n'avez jamais entendu parler de variable aléatoire ou de distribution de probabilité,


vous allez avoir des difficultés à suivre le reste du cours. Je vous conseille de suivre en amont
un cours d'introduction aux probabilités et aux statistiques. Vous en trouverez dans le
parcours Data Analyst sur OpenClassrooms.
Le mieux pour expliquer ce que ça signifie est de prendre un petit exemple simple. Imaginez
que vous voulez savoir si vous payez trop cher votre loyer. Vous avez récupéré sur un site de
location une trentaine de prix des locations disponibles, ainsi que la surface associée :

loyer mensuel (en €) surface (en m2m2) 

 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 :

Loyer mensuel en fonction de la surface du logement


Comme on pouvait s’y attendre, on remarque une augmentation relativement linéaire du loyer
par rapport à la surface de l’appartement. Une première modélisation simple du phénomène
(le prix du loyer) serait donc simplement de considérer la droite la plus “proche” de l’ensemble
des points.
La droite de régression correspondant à la modélisation du nuage de points

La droite représente donc notre modèle du phénomène, auquel nous pouvons


ajouter l'intervalle de confiance dans laquelle on pense que se trouve la droite.

L'intervalle de confiance (à 90 %)

Pour résumer, le travail de modélisation consiste à trouver le bon modèle statistique (ici


la droite et son intervalle de confiance) qui colle le mieux aux données d'exemple. Le machine
learning en particulier intervient pour trouver ce modèle de manière automatisée.

Évaluez et interprétez les résultats


Une fois un premier travail de modélisation effectué, la suite de l’étude s’effectue
par l’évaluation de la qualité de notre modèle, c’est à dire sa capacité à représenter avec
exactitude notre phénomène, ou a minima sa capacité à résoudre notre problématique.

Une représentation connue qui souligne la nécessité de l'évaluation est le quartet


d'Anscombe. Il permet de montrer visuellement que pour 4 jeux de données très différents, on
obtient la même droite de régression.
Le quartet d'Anscombe illustre bien le fait que si on n'examine pas assez les données, et on ne
mesure pas de la bonne manière l'erreur de son modèle, on peut facilement arriver à des
aberrations de modélisation
Il y a parfois clairement un problème dans notre modèle qui ne capture pas l'essence du
phénomène. Pour nous aider à évaluer les résultats, mesurer l’erreur de notre modélisation vis-
à-vis de nos données d’exemple constitue un premier indicateur de qualité. Dans les cas ci-
dessus, il faudrait clairement changer le modèle d’une droite que nous avions décidé au
départ !

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.

Déployez le modèle en production


Une fois qu’on est satisfait de la qualité des performances de notre modèle, on va pouvoir
passer à l’étape suivante, qui est le rendu de nos résultats et le potentiel déploiement du
modèle en production. Imaginez que vous trouvez que votre modèle d’évaluation des loyers est
très performant, et mériterait d’être partagé à plus de monde. Vous décidez donc de le déployer
sur un serveur où tout le monde pourra obtenir une estimation de son loyer selon votre modèle,
et ainsi déterminer s'il paie plus ou moins que les prix du marché ! Cela l'aidera sûrement dans
sa décision de déménager. 😬

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.

Là encore, si ce passage en production est complexe, en termes d’échelle, de contrainte de


rapidité de calcul ou de sortie de résultats, il faut faire appel à un data architect qui sera
responsable d’industrialiser le prototype que vous lui fournirez.
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 plus informées. Elle s’appuie
pour cela de données utiles et ne peut s’appliquer que dans certaines problématiques précises,
qui gagnent à utiliser ce type de méthodes.

Au sein de du cycle de travail du data scientist, le machine learning désigne l'ensemble des


méthodes de modélisation statistique à partir des données.

Identifez les différentes étapes de modélisation


Dans le chapitre précédent, vous avez découvert le cycle de travail du data scientist. Nous
allons maintenant parler spécifiquement de la partie qui nous intéresse dans ce cours, c'est-à-
dire la modélisation. Et pour modéliser les données, un vrai data scientist utilise son arme
secrète de ninja : le fameux machine learning.

Démystifions le machine learning


Lorsqu'on entend parler de machine learning, ou plus généralement de l'intelligence artificielle -
dont le machine learning est un sous-domaine -, on pense généralement à ça :

Terminator... Ce n'est pas pour tout de suite !

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 :

Cycle de travail du data scientist

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.

Le problème de machine learning constitue l'étape suivante et permet à un ordinateur de


modéliser les données qui lui sont fournies.

"Modéliser" signifie dans ce cas représenter le comportement d'un phénomène afin de pouvoir


aider à la résolution d'un problème concret de l'entreprise. 

Mais pourquoi parle-t-on d'apprentissage ?


En machine learning, l'algorithme se construit une "représentation interne" afin de pouvoir
effectuer la tâche qui lui est demandée (prédiction, identification, etc). Pour cela, il va d'abord
falloir lui entrer un jeu de données d'exemples afin qu'il puisse s'entraîner et s'améliorer, d'où
le mot apprentissage. Ce jeu de données s'appelle le training set. On peut appeler une entrée
dans le jeu de données une instance ou une observation. 

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

En résumé, le travail du data scientist en machine learning consiste à sélectionner les


bonnes données test, choisir et entraîner le bon algorithme en vérifiant grâce à l'analyse
d'erreurs que le modèle devient de plus en plus performant et robuste. Si les performances
s'améliorent lorsqu'on lui fournit les données d'entraînement, on dit alors que la machine
"apprend".

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 (les données d'entraînement mais aussi les nouvelles données)


 La tâche spécifique à accomplir (prédire, recommander, décider quelque chose, etc.)
 L'algorithme d'apprentissage en lui-même
 L'analyse d'erreur (ou mesure des performances du modèle)
Laissez-moi maintenant détailler un peu plus chacun de ces éléments dans les prochaines
sections !

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.

Les bases de données


Ça coule de source, mais les bases de données constituent la source principale de
récupération de données par les data scientists. Ces bases de données peuvent comprendre
différents types d'information, une bonne partie généralement spécifique à l'activité de
l'entreprise.

À titre d'exemple et de manière non exhaustive :


 les logs d'un serveur web
 le catalogue produits d'un site de e-commerce
 les transactions bancaires
 les comportements des utilisateurs d'un site
 ...
Les données brutes
D'autres données brutes, souvent plus complexes et nécessitant des pré-traitements
spécifiques pour les rendre manipulables par les algorithmes, peuvent servir de sources pour
un problème de modélisation.

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.

Le traitement du texte (appelé NLP comme Natural Language Processing) constitue un


domaine de recherche à part entière.
Les images (et vidéos)

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.

Un exemple de pré-traitement d'image appelé seuillage, qui permet de simplifier ensuite


l'apprentissage d'un modèle statistique (crédits : The MathWorks, Inc.) 

Le traitement des images et vidéos constitue un domaine de recherche à part entière


(Computer vision en anglais).

IoT (Internet des objets)

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.

Chaque tâche se traduira différemment et nécessitera bien sûr le choix d'algorithmes différents.


Nous examinerons dans le dernier chapitre de cette partie quelques problématiques courantes
et comment elles se traduisent en problèmes de machine learning.

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.

Identifiez les différents types d'apprentissage


automatiques
Dans le chapitre précédent, nous avons vu les éléments spécifiques nécessaires à la
formulation et la résolution d'un problème de machine learning. Dans ce chapitre, je vais vous
présenter les grandes familles d'algorithmes d'apprentissage existantes.

Apprentissage "supervisé" ou "non supervisé"


Une première grande distinction à faire en machine learning est la différence entre
apprentissage supervisé et non supervisé. En anglais ces deux notions se nomment
respectivement supervised learning et unsupervised learning.

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.

En apprentissage supervisé, vous allez récupérer des données dites annotées de leurs


sorties pour entraîner le modèle, c'est-à-dire que vous leur avez déjà associé un label ou
une classe cible et vous voulez que l'algorithme devienne capable, une fois entraîné, de prédire
cette cible sur de nouvelles données non annotées. Dans notre exemple, les données d'entrée
seraient des images, et la cible (ou target en anglais) la catégorie de photos que vous voulez.
Chaque image utilisée pour entraîner l'algorithme est étiquetée avec sa catégorie.

En apprentissage non supervisé, les données d'entrées ne sont pas annotées. Comment


cela peut-il fonctionner ? Et bien, l'algorithme d'entraînement s'applique dans ce cas à trouver
seul les similarités et distinctions au sein de ces données, et à regrouper ensemble celles qui
partagent des caractéristiques communes. Dans notre exemple, les photos similaires
seraient ainsi regroupées automatiquement au sein d'une même catégorie.

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. 😇

En réalité, il existe un ensemble de contraintes et d'enjeux supplémentaires (le nombre de


données en entrée, la capacité de convergence d'un modèle en fonction du type de données,
etc.) qui influencent aussi et créent une granularité supplémentaire dans votre choix du
modèle. Nous étudierons les contraintes et enjeux de chaque modèle lorsque nous les
aborderons individuellement, dans d'autres cours.

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.

Faire ce lien doit devenir une seconde nature pour vous !


Allez, voyons ensemble quelques exemples concrets.

Affectez un score à un client


Le scoring est une technique répandue dans le domaine du marketing. Le score obtenu traduit
généralement la probabilité qu'un individu réponde à une sollicitation marketing ou appartienne
à la cible recherchée (par exemple, la probabilité qu'un prospect devienne un client payant, ou
qu'un client fasse défaut, c'est-à-dire ne rembourse pas un crédit dans le cas d'une banque ou
d'une assurance).

Le scoring est le plus souvent associé aux méthodes de régression, supervisée ou non


supervisée selon les données d'entraînement.

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.

Prédisez la rentabilité d’une campagne marketing


Les entreprises ont souvent besoin d’évaluer le ROI (retour sur investissement) d’une
campagne (ou simplement d'en comparer plusieurs) avant de la lancer, afin d’estimer si le jeu
en vaut la chandelle. C’est aussi une méthode utilisée par les régies publicitaires afin de
pouvoir ajuster leurs métriques et prix en temps réel (tels que le CPC ou CPM).

CPC (coût par clic) : le coût d'un clic sur une publicité

CPM (coût pour mille) : le coût pour mille impressions d'une publicité  


Prédiction du CTR (% de visiteurs qui cliquent un lien) selon l'heure de la journée.
Source: Kaggle

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.

Identifiez les événements rares


Un premier type de catégorisation automatique est celle de l’identification d’événements
appelés événements rares : les spams d’email, les transactions frauduleuses, les textes
injurieux, etc.

On peut traiter ce problème comme un problème de classification supervisée en annotant les


données d'entraînement ("événement rare" et "événement normal" par exemple).

Dans la littérature, ce genre d'événement/anomalie est appelé outlier. Nous allons les désigner


ainsi dorénavant. 🙃
Mais en fait, on peut aussi effectuer une première modélisation (supervisée ou non supervisée)
qui va permettre de modéliser le comportement habituel. Ensuite, simplement fixer un
critère de distance qui permet de déterminer si une entrée est trop éloignée de la modélisation,
c'est-à-dire du comportement attendu. La difficulté réside ensuite dans le choix du bon critère
de distance spécifique au problème traité.

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.

Comment détecter des outliers comme le point rouge ?


Affectez une catégorie à un produit
Lorsque le catalogue de produits d'un distributeur grandit, la problématique de catalogage se
fait ressentir, car elle demande un travail minutieux et donc un temps homme conséquent. Avec
les bonnes entrées d’entraînement, l’automatisation de cette tâche peut se faire avec des
algorithmes de classification.

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.

Des applications comme Pocket utilisent la classification automatique de nouveaux liens


entrants afin de proposer à l'utilisateur des suggestions de tags.  Source : getpocket.com
Segmentez les visiteurs d’un site
A partir d’une étude préalable ou bien d'une connaissance qualitative de la clientèle d’une
entreprise, vous souhaitez catégoriser automatiquement vos clients et les assigner à différents
segments (plus ou moins susceptibles de réaliser un achat par exemple).

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...

 d'effectuer une classification supervisée en annotant manuellement des segments qui


nous intéressent sur une base client d'entraînement
 d'essayer de prédire à l'aide d'une régression la susceptibilité de conversion d'un client et
ensuite effectuer une segmentation sur ce critère (< 1 % vs > 1 % susceptibles de
convertir par exemple)
 d'effectuer une classification non supervisée afin de détecter de nouveaux groupes
d'intérêts qui peuvent être targetés individuellement
 etc.
La difficulté à utiliser ces algorithmes, notamment concernant les événements rares, est de
rassembler assez de données d’entraînement, contenant de plus un maximum de variété. À
vous de jouer avec les données que vous avez et surtout à vous de bien valider les
performances du modèle pour vous rendre compte de sa qualité avant de le déployer en
production !
Recommandez un produit à un client
La recommandation est une problématique qui revient très souvent pour les data scientists :
suggérer d'autres produits à acheter sur Amazon, des films à regarder sur Netflix, des musiques
à écouter sur Spotify, etc. C'est vraiment utile, à la fois pour l'utilisateur final et pour l'entreprise
qui peut ainsi proposer le contenu le plus pertinent.

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. 

Mais du coup c'est de la classification ? de la régression ? supervisée ? non supervisée ? 


Bonne question ! En réalité, ce problème peut être formulé d'énormément de manières
différentes. Une technique largement répandue est le "collaborative filtering", qui se base sur
des similarités entre utilisateurs, ou bien des similarités entre produits. Dans ces deux cas, c'est
un problème non supervisé : on procure toutes nos données à l'algorithme et on le laisse
essayer de déterminer les relations entre les différentes entités. 

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.

C'est bien beau mais à quoi ça sert en pratique ?


En pratique, le clustering permet de détecter des grandes catégories au sein des données. Une
utilisation courante en marketing par exemple est le partitionnement automatique de
consommateurs en différents segments. Vous vous en doutez maintenant, c'est aussi souvent
utilisé pour les moteurs de recommandation automatique (e.g., recommander des instances
appartenant au même cluster que l'instance considérée).

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 :

 Affecter un score à un client


 Prédire la rentabilité d’une campagne marketing
 Identifier les événements rares
 Affecter une catégorie à un produit
 Segmenter les visiteurs d’un site
 Recommander un produit à un client
Une fois que vous aurez acquis l'expérience nécessaire, vous arriverez de plus en plus
facilement à effectuer la traduction d'une problématique réelle en problème de machine learning
!

Sélectionnez les outils de Data Science appropriés


Chacune des étapes du travail du Data Scientist possède des outils spécifiques associés. Ce
chapitre a pour vocation de vous présenter les choix les plus populaires pour chacun des
domaines, et surtout des critères qui vous permettront de choisir selon vos propres
problématiques et vos contraintes.
"R ou Python ?"
Vous en avez sans doute déjà entendu parler, mais la guerre fait rage entre ces deux langages
pour déterminer lequel sera dominant sur le marché de la Data Science.

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.

Python est aussi un “vieux” langage (1991). Il est devenu plus récemment le langage de


référence pour tous les ingénieurs qui veulent effectuer rapidement des implémentations
d’algorithmes mathématiques, entre autre de Machine Learning.

Quel est le langage le plus recherché sur Google ?

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.

Notez que le parcours Data Analyst d’OpenClassrooms laisse le choix du langage à


l’étudiant : R ou Python.
La récupération des données
La première étape est donc de récupérer les données. Vous vous en doutez, cela dépend
fortement de votre problématique : une voiture autonome générera des données à partir de ses
capteurs, une entreprise de trading récupérera les données sur des outils de marché financier,
etc. Pas de recette toute faîte donc. Voici quelques pistes un peu générales que je peux vous
donner à titre d'inspiration :

 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.

Le nettoyage et l'exploration des données


En Python, l’écosystème Scipy est universellement utilisé avec ses librairies :

 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.

Recherche de "TensorFlow" et Scikit-Learn sur Google

On dirait que Tensorflow semble plus populaire et possède une communauté plus active,


pourquoi ne pas avoir utilisé ce framework dans les cours ?
En effet, Tensorflow est plus populaire, mais Scikit-Learn est beaucoup plus simple d’accès.
Dans un objectif pédagogique, c’est le choix évident pour aborder nos différentes thématiques.
Mon conseil est de se familiariser avec les deux. Scikit-Learn permet de rapidement tester les
modèles de bases utilisés en Data Science. Tensorflow permet plus de flexibilité dans
l’implémentation et permet d’aller plus loin, notamment grâce à Keras, pour la construction
d’algorithmes de Deep Learning.

Le déploiement et la mise en production


La manière la plus simple d’effectuer une mise en production est d’exporter notre modèle final
et de le rendre accessible sous forme d’API sur un serveur.

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’image ci-dessous représente une partie de l’écosystème Hadoop avec les différentes


librairies qui répondent chacune à une utilisation spécifique de mise en place d’architecture Big
Data.

L'éco-système Hadoop est très fourni et répondra à tous vos besoins pour la mise en
production

Et pour les cours OpenClassrooms, quelles sont les librairies utilisées ?


Ce cours est centré sur le travail de modélisation du Data Scientist, le Machine Learning, et non
sur la mise en place d’une architecture en production. Pour plus d’informations sur ce sujet, je
vous invite à consulter le parcours DataArchitect, qui s'occupe en détail de la plupart des
questions concernant la création du data lake et de la mise en production sur des Big Data.

Passez par une API pour gagner en simplicité


Il existe une alternative si vous êtes pressés par le temps, si vous voulez tester rapidement
la viabilité d’un projet ou encore si vous n’avez pas besoin de performances énorme, c'est
de passer par une API. Les plus reconnues sont Google Cloud AI, Microsoft Azure Machine
Learning et AWS Machine Learning. Ces logiciels, hébergé dans le cloud, permettent
directement de travailler sans code sur tout les aspects évoqués plus haut, notamment la partie
modélisation et la mesure de performance.
Aperçu de l'interface d'Azure Machine Learning

 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.

Construisez un modèle statistique


Maintenant que nous avons posé les bases du machine learning et que vous avez une
meilleure idée de quand et comment l'utiliser... et bien, il est temps de rentrer dans le
concret. 🤓 Que diriez-vous d'entraîner vos premiers algorithmes ? C'est précisément ce que
nous allons attaquer dans cette deuxième partie du cours. Mais avant de nous lancer dans le
code, développons dans ce chapitre notre intuition de la notion d’apprentissage et ce qu’elle
représente lorsqu’on parle de machine learning... c’est à dire d’algorithmes qui
peuvent améliorer leurs performances à partir d’expériences. 

Construisez un modèle statistique


Qu'est-ce qu'on essaie de faire déjà ?
Rappelez-vous, l’objectif du machine learning est de trouver un modèle qui effectue
une approximation de la réalité (le phénomène à l’origine des données), à l’aide de laquelle on
va pouvoir effectuer des prédictions.

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).

La formule se résume à l'équation suivante :


Données = Modèle sous-jacent + bruit indépendant

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 θ.

Il existe aussi une famille d’algorithmes appelés non-paramétriques, qui eux ne sont pas


contraints par des paramètres et du coup grandissent en complexité en fonction des données
d'entraînement. Nous en étudierons certains plus tard, mais nous n'avons pas besoin d'entrer
dans les détails pour l'instant.

Utilisez la fonction loss, ou la perte d’information


En apprentissage supervisé, la notion principale est celle de perte d’information (loss en
anglais) due à l'approximation dont je viens de parler. Elle détermine à quel point notre
modélisation du phénomène, qui est une approximation de la réalité, perd de l’information par
rapport à la réalité observée à travers les données d’exemple.

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.

Minimisez l’erreur du modèle


Une première manière de représenter cette perte se fait par ce qu’on appelle l’erreur ou
le risque, qui traduit l’éloignement des données par rapport à la prédiction effectuée par le
modèle considéré.

À 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.

Lors de l'apprentissage de notre modèle, on cherche alors à converger vers le minimum de


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.

Maximisez la vraisemblance du modèle


Un autre type de fonctionnement des algorithmes qu’on retrouve beaucoup en machine learning
sur des modèles paramétriques, et qui nous vient des statistiques, est la maximisation de
la vraisemblance (maximum likelihood estimation). 

Je rappelle que la vraisemblance d'un jeu d'observations (x1...xN) par rapport à un modèle en


statistiques est la fonction suivante :  L(θ)=p(x1...xN|θ).
Cette valeur représente la probabilité d'avoir le jeu d'observations étant donnés les
paramètres θ.
Dans ce cas-là, l’objectif pour l’algorithme sera de converger vers le maximum de la fonction
de vraisemblance du phénomène considéré, en trouvant le bon θ, toujours à partir de nos
observations de départ.
θ^=argmaxθL(θ)
On note θ^ avec un accent circonflexe lorsqu'on parle d'un estimateur et pas de la valeur réelle.
Mais c’est une maximisation, pas une minimisation ! Elle est où la fonction de perte
dont vous parliez dans ce cas-là ?
En effet, elle est un peu cachée, mais on peut trouver mathématiquement que maximiser la
vraisemblance est en fait équivalent à minimiser une fonction de perte. Et c’est une approche
très souvent utilisée, qui représente des familles d’algorithmes à part entière.

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).

Une histoire d'optimisation numérique


Au final, l'apprentissage c'est souvent une histoire d'optimisation numérique ! Les fonctions de
perte que je viens de vous présenter sont des exemples illustratifs de l'approche qu'on
développe pour construire un algorithme de machine learning. Une grande partie des
algorithmes s’appuient donc sur des méthodes d’optimisation numérique, c’est-à-dire des
méthodes qui vont rechercher un maximum ou un minimum d’une fonction déterminée (vous
entendrez parler de loss, entropy, energy, likelihood, etc.) de manière exacte ou approximée.

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.  

Programmez votre première régression linéaire


La régression linéaire est un premier exemple simple de la manière dont un algorithme
peut apprendre un modèle. Pour franchir le pas, je vous propose maintenant de l'aborder en
pratique, donc à vos claviers !

Installez les logiciels utilisés


Vous aurez besoin d’installer scikit-learn pour coder l’exemple en même temps que moi. 

Je vous recommande aussi d’utiliser un notebook Jupiter, pratique pour afficher vos résultats au
fur et à mesure directement dans un navigateur web.

Définissez la problématique et ses données d'entraînement


Reprenons notre problématique des loyers abordée dans le premier chapitre de ce cours. La
question qu'on essaie de résoudre est :

Étant donné les caractéristiques de mon appartement, combien devrais-je normalement payer


mon loyer ?

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')

# On affiche le nuage de points dont on dispose


plt.plot(house_data['surface'], house_data['loyer'], 'ro', markersize=4)
plt.show()
Répartition des loyers sous forme de droite

Clairement d'après la visualisation, on peut se dire que le montant du loyer dépend de


manière linéaire de la surface du logement. On peut donc émettre une hypothèse de
modélisation qui est que le phénomène possède la forme d'une droite. 

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.

house_data = house_data[house_data['loyer'] < 10000]


Dans notre exemple, nous utilisons un dataset unidimensionnel en entrée (où les observations
dépendent seulement de la variable x = surface) pour un souci de confort, car c’est plus facile à
représenter visuellement. En réalité, on a bien plus de dimensions (features) lorsqu’on travaille
avec de "vraies" données !
Reformulez le problème dans l'espace d’hypothèse : une droite
La régression linéaire s’appuie sur l’hypothèse que les données proviennent d’un phénomène
qui a la forme d'une droite, c’est-à-dire qu’il existe une relation linéaire entre l’entrée (les
observations) et la sortie (les prédictions).

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).

On met y^y^ avec un chapeau pour le distinguer des observations réelles. On parle de


l’estimation ici, donnée par le modèle.
En général, une observation a plusieurs variables qui la caractérise (un appartement est par
exemple caractérisé par une surface et un nombre de pièces). Donc une observation
est caractérisée par un vecteur  xTi=(1,vi1,vi2,...,viD) avec D le nombre de
variables caractérisant l'observation.
La constante 1 est ajoutée à chaque observation pour représenter l'ordonnée à l'origine et avoir
une écriture vectorielle plus compacte.
Dans notre cas, puisqu’on est en une dimension,  D=1, donc on peut écrire pour
un observation  ii    yi^=xTiθ=θ0+θ1×vi1
où  vi1v1i représente la surface pour du ièmeième appartement de notre échantillon de
taille NN  .
Je rappelle que les données sont ainsi générées :

données = modèle sous-jacent + bruit irréductible


C'est-à-dire ici :
données = xTθ  + bruit irréductible
Notre objectif est donc de trouver la droite paramétrée par θ=(θ0,θ1) qui fitte le mieux aux
données d’entraînement.
Définissez la fonction loss
Pour effectuer une régression linéaire, on doit ensuite choisir une fonction de perte dont on a
parlé dans le chapitre précédent. On ne va pas prendre de risque, on va prendre la distance
euclidienne. 😉

La distance euclidienne d'une observation yi  vis-à-vis de notre modèle y^i est :


||y^i−yi||2=||xTiθ−yi||2
Le risque empirique dont on parlait dans le chapitre précédent est donc, pour N
observations : 

  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 !).

Bon en tout cas, on peut maintenant calculer les paramètres directement :


# On décompose le dataset et on le transforme en matrices pour pouvoir effectuer notre calcul
X = np.matrix([np.ones(house_data.shape[0]), house_data['surface'].values]).T
y = np.matrix(house_data['loyer']).T
# On effectue le calcul exact du paramètre theta
theta = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)
print(theta)
On trouve donc la valeur numérique de θθ pour nos données :
[[ 266.45460292]
[ 30.66119596]]
Notre modèle final qui colle bien aux données sera donc dans notre cas (approximativement) :

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()

Notre régression linéaire


Utilisez le modèle pour effectuer des prédictions
Maintenant qu’on a notre paramètre θ, c’est-à-dire qu’on a trouvé la droite qui colle le mieux à
nos données d’entraînement, on peut effectuer des prédictions sur de nouvelles données, c'est-
à-dire prédire le loyer en fonction de la surface qu’on nous donne en entrée, en appliquant
directement la formule du modèle ci-dessus.
Par exemple, si on l’applique pour une surface de 35m carrés :

theta.item(0) + theta.item(1) * 35
On obtient une estimation du loyer :
1339.646166
Essayez avec n'importe quelle surface !

On vient ici de décomposer l’entraînement de la régression linéaire. En réalité, vous vous


doutez bien que cette régression est déjà implémentée dans le package scikit-learn. On peut
l'utiliser directement de la manière suivante :
from sklearn import linear_model
regr = linear_model.LinearRegression()
regr.fit(X, y)
regr.predict(<des données de test>)
Bonne nouvelle ! Les prochains modèles que nous utiliserons auront leur algorithme
d'entraînement et de prédiction directement implémentés dans scikit-learn, nous aurons juste à
appeler directement leurs fonctions associées. 😎
En résumé
 À partir d'une problématique et d'un dataset, nous avons considéré une hypothèse de
travail pour contraindre le modèle : ici nous nous sommes placés dans le cas d'une
régression linéaire, qui signifie contraindre la forme du modèle à une droite.
 Nous avons décomposé l'entraînement de ce modèle sur les observations, afin de
déterminer le paramètre (pente et ordonnée à l'origine) de la droite optimale pour ces
données. C'est cette partie que l'on appelle apprentissage du modèle.
 À l'aide du modèle ainsi trouvé, nous avons effectué des prédictions de montant de loyer
à partir de n'importe quelle surface donnée.
Allez plus loin : le “vrai” travail de modélisation
Maintenant qu’on a trouvé un premier modèle, il serait possible de tester plein d’hypothèses
différentes pour aller plus loin et améliorer ses performances.

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...

Entraînez votre premier k-NN


Dans ce chapitre, nous allons utiliser un algorithme aussi répandu que la régression linéaire,
qui s'appelle le k- le traitement du jeu de données, vu au chapitre précédent.

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).

Notre nuage de points de test


Si on a une nouvelle entrée dont on veut prédire la classe, comment pourrait-on faire ?

Le point blanc est une nouvelle entrée.


Et bien on va simplement regarder les k voisins les plus proches de ce point et regarder quelle
classe constitue la majorité de ces points, afin d'en en déduire la classe du nouveau point. Par
exemple ici, si on utilise le 5-NN, on peut prédire que la nouvelle donnée appartient à la
classe rouge puisqu'elle a 3 rouges et 2 bleus dans son entourage. 
Les 5 points les plus proches du point que l'on cherche à classer
On a utilisé ici comme mesure de similarité la distance euclidienne. On peut bien sûr utiliser
d’autres normes.
On peut facilement en déduire les zone rouge et bleue, où les points qui se situeront dans la
zone seront respectivement classés comme rouge ou bleu.

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 !

C'est un peu peu compliqué que ça


Vous parliez, dans les chapitres précédents, de modèles statistiques auxquels on voudrait faire
correspondre les données, c’est quoi le modèle ici ? 
En fait, le k-NN est un type spécial d’algorithme qui n’utilise pas de modèle statistique. Il est
"non paramétrique", et il se base uniquement sur les données d’entraînement. Ce type
d’algorithme est appelé memory-based. A contrario, la régression linéaire est paramétrique, de
paramètre θ et ne va donc pas avoir besoin de conserver toutes les données pour effectuer des
prédictions, mais seulement θ. 
C'est d'ailleurs un autre inconvénient de l'algorithme k-NN, il doit conserver toutes les données
d'entraînement en mémoire (memory-based) et donc convient aux problèmes d'assez petite
taille.
Il va s'agir maintenant de choisir le bon nombre de voisins k, en fonction de l’erreur de
généralisation du modèle.

k n'est pas un paramètre mais un hyperparamètre, c'est-à-dire que contrairement aux


paramètres classiques, il ne va pas pouvoir être appris automatiquement par l'algorithme à
partir des données d'entraînement. Les hyperparamètres permettent de caractériser le modèle
(e.g. complexité, rapidité de convergence etc). Ce ne sont pas les données d'apprentissage qui
vont permettre de trouver ces paramètres (en l'occurence ici le nombre de voisins k) mais bien
à nous de l'optimiser, à l'aide du jeu de données test.
Utilisez k-NN sur un vrai jeu de données
OK, on peut maintenant passer aux choses sérieuses !

Les données et la problématique


D'abord, parlons du jeu de données que nous allons utiliser. C'est un dataset très célèbre
appelé MNIST. Il est constitué d'un ensemble de 70000 images 28x28 pixels en noir et blanc
annotées du chiffre correspondant (entre 0 et 9). L'objectif de ce jeu de données était de
permettre à un ordinateur d'apprendre à reconnaître des nombres manuscrits automatiquement
(pour lire des chèques par exemple). Ce dataset utilise des données réelles qui ont déjà été
pré-traitées pour être plus facilement utilisables par un algorithme.

Un extrait du type d'images que l'on trouve dans le dataset MNIST


Notre objectif sera donc d'entraîner un modèle qui sera capable de reconnaître les chiffres
écrits sur ce type d'images. Par chance, ce jeu de données est téléchargeable directement à
partir d'une fonction scikit-learn. On peut donc directement obtenir ce dataset via un appel de
fonction :
from sklearn.datasets import fetch_openml
mnist = fetch_openml('mnist_784', version=1)
Le dataset peut prendre un certain temps à se charger, soyez patients.

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  .

Séparer training / testing set


Une fois notre dataset chargé, comme nous l'avons vu dans le chapitre précédent, nous allons
séparer le jeu de données en training set et testing set.

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.

Testons à présent l’erreur de notre classifieur. La méthode  score  effectue exactement ça :


tester les performances de prédiction d'un classifieur dans lequel on passe un jeu de données
annoté — dans notre cas le jeu de données de test. Il renvoie ainsi le pourcentage de prédiction
véridique trouvée par le classifieur.
error = 1 - knn.score(xtest, ytest)
print('Erreur: %f' % error)
Qui nous donne en sortie :
Erreur: 0.06999999999999995
Pas mal déjà !

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.

Optimisation du score sur les données test


Pour trouver le k optimal, on va simplement tester le modèle pour tous les k de 2 à 15, mesurer
l’erreur test et afficher la performance en fonction de k :
errors = []
for k in range(2,15):
knn = neighbors.KNeighborsClassifier(k)
errors.append(100*(1 - knn.fit(xtrain, ytrain).score(xtest, ytest)))
plt.plot(range(2,15), errors, 'o-')
plt.show()

L'erreur en pourcentage pour les différents classifieurs


Comme on peut le voir, le k-NN le plus performant est celui pour lequel k = 4. On connaît donc
notre classifieur final optimal : 4-nn. Ce qui veut dire que c'est celui qui classifie le mieux les
données, et qui donc dans ce cas précis reconnait au mieux les nombres écrits à la main.

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()

Les prédictions du classifieur associées aux images


Pour pouvoir un peu mieux comprendre les erreurs effectuées par le classifieur, on peut aussi
afficher un extrait des prédictions erronées :
# on récupère les données mal prédites
misclass = (ytest != predicted)
misclass_images = images[misclass,:,:]
misclass_predicted = predicted[misclass]
# on sélectionne un échantillon de ces images
select = np.random.randint(misclass_images.shape[0], size=12)
# on affiche les images et les prédictions (erronées) associées à ces images
for index, value in enumerate(select):
plt.subplot(3,4,index+1)
plt.axis('off')
plt.imshow(misclass_images[value],cmap=plt.cm.gray_r,interpolation="nearest")
plt.title('Predicted: {}'.format(misclass_predicted[value]) )
plt.show()

Quelques exemples d'images mal classées


En résumé
On vient de voir sur un algorithme simple comment l'entraîner sur des données pour ensuite
optimiser les paramètres de cet algorithme à l’aide d’un jeu de données test.

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

 qui marche plutôt bien dans la plupart des cas


Je rajoute ce dernier point parce que parfois on a des problèmes avec cet algorithme, mais il existe des extensions
pour résoudre ces problèmes.
n ne s’attardera pas trop là-dessus dans cet article mais on verra quand même les problèmes les plus classiques.
Comment ça marche ?
Je vais d’abord vous donner une explication un peu intuitive, et ensuite on fera des maths.
Imaginez que vous soyez un skieur dans la montagne.
Et vous voulez trouver le point le plus bas (c’est-à-dire trouver le point à l’altitude minimale).
Votre approche, ça va être de vous mettre face à la pente (descendante), et boom vous avancez dans cette direction
pendant 5 minutes.
5 minutes plus tard, vous êtes à un nouveau point.
De nouveau, vous vous mettez face à la pente et avancez dans cette direction pendant 5 minutes.
Et ainsi de suite..
Et au bout d’un moment, à force de toujours descendre, vous arriverez tout en bas.
Facile !
Comment ça marche mathématiquement ?
En maths, la pente, ça correspond à la dérivée :

La valeur de la dérivée correspond à l’inclinaison de la pente en un point donné.


Donc :
 si la dérivée est élevée, c’est que la pente est très pentue.
 Et si la dérivée est faible, la pente est faible.

 Si la dérivée est égale à 0, c’est tout plat. C’est le cas au minimum par
exemple.

 Et si la dérivée est négative, c’est que ça descend (quand on va vers la


droite !).
Donc une fois qu’on a la valeur de la pente, comment est-ce qu’on fait pour descendre ?
On va à l’inverse de la pente !
 Dérivée positive => pente qui monte vers la droite => on va vers la gauche.
 Dérivée négative => pente qui descend vers la droite => on va vers la droite.
Ok, alors sur le dessin, on a compris qu’il fallait aller vers la gauche.
Mais de combien ?
Est-ce qu’on fait un seul pas, deux pas, on continue pendant combien de temps ?
En fait, on aimerait bien faire juste un pas, se reposer la question de la dérivée, puis refaire un pas, etc.
Sauf que ça va être très gourmand en calcul (on va prendre beaucoup de décisions) si on fait ça. Et donc ça va être
lent.
Mais d’un autre côté, si on fait des gros pas, on risque de louper le minimum, donc revenir dans l’autre sens, re-
dépasser le minimum, et ainsi de suite, sans jamais tomber dessus.
Il faut juste trouver le juste milieu !
Ça se fait en spécifiant ce qu’on appelle un taux d’apprentissage. On va en reparler un peu plus tard.
Et les maths, dans tout ça ?
Prenons un exemple, et arrêtons avec les dessins moches à la main.
Considérons la fonction suivante :
f(x)=2x²cos(x)−5x
import numpy as np
def f(x):
return 2 * x * x * np.cos(x) - 5 * x
Et étudions-la sur l’intervalle  [−5,5] :

L’objectif est de trouver le minimum qu’on voit à droite, vers x entre 3 et 4.

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 :

1. On prend un point au pif x0.


2. On calcule la valeur de la pente  f′(x0).

3. On avance dans la direction opposée à la pente : x1 =x0−α∗f′(x0).


Ici, α correspond à ce fameux taux d’apprentissage « Learning rate », et le
moins permet d’aller dans la direction opposée.

Première étape : On prend un point au pif  x0=−1. Ce qui correspond à  f(x0)=6.08.


x = [-1.]
f(x[0])
# 6.08060
Dessinons une grosse boule à cet endroit-là :

Deuxième étape : On calcule la valeur de la pente.


def df(x):
return 4 * x * np.cos(x) - 2 * x * x * np.sin(x) - 5

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 :

On a bougé d’un tout petit peu.

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 :

 Comment fixer le taux d’apprentissage ?


 Comment régler le problème du vanishing gradient ?

 Comment lutter contre les minima locaux ?


C’est ce qu’on va voir tout de suite !
Comment fixer le taux d’apprentissage ?
Dans l’exemple précédent, on s’est fixé  α=0.05.
Pourquoi ?
J’ai un peu triché.
J’ai testé avant et j’ai vu que c’était une valeur qui marchait bien.
En fait, il faut trouver le juste milieu en prenant en compte que :

 Plus la valeur α est grande, plus on va avancer vite, mais l’algorithme risque


de ne jamais converger.
 Plus la valeur α est petite, plus on va avancer lentement, et donc plus ça va
être long de converger.

Par exemple, avec une valeur α=0.2, on obtient :


Là on voit qu’on a un problème de convergence. La valeur α est trop grande.
Du coup, quand le skieur est face à la pente, il avance tellement qu’il se retrouve de l’autre côté de la montagne.

Si on prend une valeur trop petite, comme  α=0.001 :

Ça marche, ça converge, sauf que ça prend beaucoup plus de temps !

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.

Pour le trouver, il faut en tester plusieurs et prendre le meilleur.


Comment régler le problème du *vanishing gradient* ?
Il existe deux problèmes très récurrents en Deep Learning, le exploding gradient et le vanishing gradient.
Dans le premier cas, ça revient à avoir un taux d’apprentissage trop élevé qui va causer une instabilité de
l’algorithme.
En Deep Learning, ça peut arriver quand on a un très gros réseau. Comme les gradients de chaque couche sont
multipliés entre eux, on peut très rapidement avoir un gradient qui explose de manière exponentielle.
Pour le vanishing gradient, c’est l’inverse.
Le gradient devient tellement petit que notre skieur n’avance quasiment plus. Ça peut arriver si le taux
d’apprentissage est trop petit, comme on l’a vu.
Mais ça peut aussi arriver si notre skieur est coincé sur une sorte de plateau.
Imaginez la fonction suivante :
f(x)=arctan(x2)f(x)=arctan⁡(x2)

Clairement, le minimum est en x=0.


Supposons que le point au hasard tombe sur une valeur éloignée de 0, comme −20.
Je choisis un taux d’apprentissage très élevé par rapport aux exemples précédents, à α=1, et j’obtiens un
algorithme très long à converger :

Là dans cet exemple on arrive quand même à trouver le minimum.


Mais imaginez une fonction plus complexe qui soit un mélange de celle-ci, avec un long plateau plat, et des
montagnes russes à d’autres endroits.
À ce moment-là, quelque soit le taux d’apprentissage qu’on choisit, on aura des problèmes. Soit une très lente
convergence, soit une instabilité de l’algorithme.
En Deep Learning, on résout ce type de problème avec les fonctions ReLU.
Comment lutter contre les minima locaux ?
Considérons cette fois-ci la fonction suivante :

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.

Algorithm Descriptions are Broken


Learning a machine learning algorithm can be overwhelming. There are so many papers, books and websites describing how

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

tactic that I have found to be successful.


Disparate descriptions means resources such as the original descriptions of the method in the primary sources as well as

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

invaluable for certain use cases.

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

algorithm for days or weeks.

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.

Design an Algorithm Description Template

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

example applied, implementation, or your own personal reference cheat sheet.

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.

Start Small and Build it Up


The beauty of this approach is that you don’t need to be an expert in the algorithm or in research. As long as you can find some

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

called Clever Algorithms: Nature-Inspired Programming Recipes (affiliate link).

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.

Vous aimerez peut-être aussi