Feuilletage
Feuilletage
Feuilletage
Learning
avec
Scikit-Learn
Aurélien Géron
Imprimé en France
Avant-propos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . VII
Chapitre 3. – Classification. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
3.1 MNIST. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
3.2 Entraînement d’un classificateur binaire. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
3.3 Mesures de performances. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
3.4 Classification multi-classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
3.5 Analyse des erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
3.6 Classification multi-étiquettes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
3.7 Classification multi-sorties. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
3.8 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Index. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
Avant-propos
Objectif et approche
Ce livre a donc pour objectif de vous former au Machine Learning. Vous apprendrez
les concepts fondamentaux et les outils nécessaires pour créer des systèmes capables
d’apprendre à partir d’exemples, qu’il s’agisse de classer des images, d’estimer la valeur
d’un bien, etc. Nous aborderons un grand nombre de techniques et d’algorithmes,
depuis de simples systèmes linéaires, aux arbres de décision et aux forêts aléatoires en
passant par les machines à vecteurs de support, et bien d’autres encore. Vous appren-
drez aussi à utiliser Scikit-Learn, l’une des librairies open source les plus simples et
néanmoins les plus puissantes disponibles aujourd’hui, que vous pourrez directement
utiliser dans vos systèmes en production.
Hormis le premier chapitre, qui offre une vision d’ensemble du Machine Learning
et des principaux concepts, le reste de cet ouvrage est résolument axé sur la pratique :
le but n’est pas juste de vous enseigner la théorie, mais aussi que vous sachiez concrè-
tement développer vos propres systèmes de ML. Tous les exemples de code sont dis-
ponibles en ligne sous la forme de notebooks Jupyter à l’adresse suivante : https://
github.com/ageron/handson-ml. Bien que vous puissiez lire ce livre sans allumer votre
ordinateur, vous êtes fortement encouragé(e) à mettre la main à la pâte au cours de
la lecture, en particulier en faisant les exercices proposés à la fin de chaque chapitre,
et dont les solutions sont disponibles à la fin de l’ouvrage.
Prérequis
Bien que ce livre ait été écrit plus particulièrement pour les ingénieurs en informa-
tique, il peut aussi intéresser toute personne sachant programmer et ayant quelques
bases mathématiques. Il ne requiert aucune connaissance préalable sur le Machine
Learning mais il suppose les prérequis suivants :
• vous devez avoir un minimum d’expérience de programmation ;
• sans forcément être un expert, vous devez connaître le langage Python, et si
possible également ses librairies scientifiques, en particulier NumPy, Pandas et
Matplotlib ;
• enfin, si vous voulez comprendre comment les algorithmes fonctionnent
(ce qui n’est pas forcément indispensable, mais est tout de même très
Avant-propos IX
Plan du livre
• Le premier chapitre présente une vue d’ensemble du Machine Learning ainsi
que les concepts fondamentaux : qu’entend-on exactement par apprentissage
automatique ? Quels problèmes le Machine Learning peut-il résoudre ?
Quelles sont les principales catégories d’algorithmes et les principales
difficultés que l’on peut rencontrer ? Qu’est-ce que le surajustement et le sous-
ajustement ?
• Le deuxième chapitre attaque le vif du sujet en présentant un projet de Machine
Learning de A à Z (en introduisant Scikit-Learn au passage) : d’abord analyser
le problème (en l’occurrence estimer le prix de l’immobilier), puis obtenir
les données, les nettoyer, choisir une fonction d’évaluation, sélectionner
un modèle, l’entraîner sur les données d’entraînement, évaluer le système
sur un jeu de données préalablement mis de côté, rechercher les meilleurs
hyperparamètres grâce à la validation croisée, etc.
• Le chapitre 3 analyse les difficultés particulières liées aux problèmes de
classification, en particulier les diverses façons d’évaluer un classificateur, et
comment le régler au mieux selon ses besoins.
© Dunod – Toute reproduction non autorisée est un délit.
• Le chapitre 4 est le premier à ouvrir les boîtes noires, pour expliquer comment
fonctionnent les algorithmes. Il explique en particulier les principaux modèles
linéaires et montre comment les entraîner en ajustant progressivement leurs
paramètres à l’aide de l’algorithme de descente de gradient. Il montre aussi
diverses techniques de régularisation qui permettent d’éviter le piège du
surajustement.
• Le chapitre 5 se concentre sur les machines à vecteur de support (SVM), des
modèles très puissants, particulièrement prisés pour les problèmes complexes
pour lesquels on ne dispose que d’assez peu de données.
• Le chapitre 6 détaille les arbres de décision. Il s’agit de modèle simples et
polyvalents, particulièrement faciles à interpréter.
X Machine Learning avec Scikit-Learn
• Le chapitre 7 présente les forêts aléatoires, qui reposent sur une multitude
d’arbres de décision, et il explore plus généralement diverses méthodes
ensemblistes, qui permettent de combiner plusieurs modèles de Machine
Learning.
• Enfin, le chapitre 8 détaille plusieurs algorithmes de réduction de dimension-
nalité, permettant de réduire le volume d’un jeu de données pour échapper au
fléau de la dimensionnalité et ainsi accélérer l’apprentissage, ou encore à des
fins de visualisation des données.
Le Deep Learning
Pour traiter des problèmes particulièrement complexes, tels que la reconnaissance de
la parole ou encore les traductions automatiques, on utilise généralement des réseaux
de neurones, qui requièrent souvent de gros volumes de données et une immense
puissance de calcul. Presque toutes les applications du Machine Learning mises
en avant par la presse reposent sur des réseaux de neurones profonds (c’est-à-dire
organisés en de nombreuses couches successives) : on parle alors de Deep Learning
(apprentissage profond).
Ce livre n’aborde pas le Deep Learning, mais il vous donne les bases nécessaires
pour le faire. Si à l’issue de ce livre vous souhaitez poursuivre vers le Deep Learning,
nous vous recommandons le livre Deep Learning avec TensorFlow, des mêmes auteur
et éditeur. Vous y apprendrez comment utiliser la librairie TensorFlow pour créer
diverses architectures de réseaux de neurones profonds – des réseaux de neurones
convolutionnels (très utilisés pour l’analyse d’images), des réseaux de neurones récur-
rents (utiles pour l’analyse de séquences de tailles arbitraires, telles que des séries
temporelles ou la langue naturelle), des auto-encodeurs (capables de reconnaître des
motifs et de les imiter) – et comment entraîner et déployer ces réseaux de neurones
sur de nombreux serveurs grâce à TensorFlow. Enfin, ce deuxième livre présente le
Deep Reinforcement Learning : il s’agit des techniques développées par DeepMind
pour créer un système capable d’apprendre tout seul à jouer à des jeux Atari sans en
connaître les règles à l’avance.
Conventions
Les conventions typographiques suivantes sont utilisées dans ce livre :
Italique
Indique un nouveau terme, une URL, une adresse email ou un nom de fichier.
Largeur fixe
Utilisé pour les exemples de code, ainsi qu’au sein du texte pour faire référence
aux éléments d’un programme, tels que des instructions, des mots clés, des noms
de variables, de fonctions, de base de données, de types de données ou encore de
variables d’environnement.
Avant-propos XI
Remerciements
Je tiens tout d’abord à remercier mes collègues de Google, en particulier l’équipe de
classification de vidéos YouTube, pour m’avoir tant appris sur l’apprentissage auto-
matique. Je n’aurais jamais pu lancer ce projet sans eux. Un merci tout particulier
à mes gourous ML personnels : Clément Courbet, Julien Dubois, Mathias Kende,
Daniel Kitachewsky, James Pack, Alexander Pak, Anosh Raj, Vitor Sessak, Wiktor
Tomczak, Ingrid von Glehn, Rich Washington et tout le monde à YouTube Paris.
Je suis extrêmement reconnaissant à toutes les personnes qui ont pris le temps
d’examiner mon livre avec une grande attention. Merci à David Andrzejewski, qui a
fourni des commentaires très utiles, identifiant des sections peu claires et suggérant
comment les améliorer. Merci aussi à Eddy Hung, Salim Sémaoune, Karim Matrah,
Ingrid von Glehn, Iain Smears et Vincent Guilbeau pour leur lecture attentive et
leurs nombreuses suggestions. Et je souhaite également remercier mon beau-père,
Michel Tessier, ancien professeur de mathématiques et maintenant grand traducteur
d’Anton Tchekhov, pour m’avoir aidé à éliminer certaines erreurs mathématiques et
pour m’avoir aidé à clarifier les notations dans ce livre et dans les notebooks Jupyter.
Et bien sûr un immense merci à mon cher frère Sylvain, qui a passé en revue
© Dunod – Toute reproduction non autorisée est un délit.
chaque chapitre, a testé toutes les lignes de code, a fourni des commentaires sur
pratiquement toutes les sections et m’a encouragé de la première ligne à la dernière.
Love you, bro!
Un grand merci au personnel fantastique d’O’Reilly, en particulier à Nicole Tache,
qui m’a donné des commentaires perspicaces, toujours encourageants et utiles. Merci
aussi à Marie Beaugureau, Ben Lorica, Mike Loukides et Laurel Ruma d’avoir cru
en ce projet et de m’avoir aidé à le définir. Merci à Matt Hacker et à toute l’équipe
d’Atlas pour avoir répondu à toutes mes questions techniques concernant le forma-
tage asciidoc et LaTeX. Merci également à Rachel Monaghan, Nick Adams et à toute
l’équipe de production pour leur relecture finale et leurs centaines de corrections.
Je souhaite également remercier Jean-Luc Blanc, des éditions Dunod, pour avoir
soutenu et géré ce projet, et pour ses relectures attentives. Je tiens aussi à remercier
XII Machine Learning avec Scikit-Learn
vivement Anne Bohy qui a traduit cet ouvrage en français bien mieux que je n’aurais
su le faire. Dotée d’une grande expérience en développement informatique et d’un
doctorat en mathématiques, elle était sans doute la traductrice idéale pour ce livre :
elle a identifié plusieurs erreurs et imprécisions, de sorte que le livre que vous tenez
entre les mains est une traduction sans doute meilleure que la version originale !
Pour finir, je suis infiniment reconnaissant à ma merveilleuse épouse, Emmanuelle,
et à nos trois enfants, Alexandre, Rémi et Gabrielle, pour leur patience et leur sou-
tien sans faille pendant l’écriture de ce livre. J’ai même eu droit à des biscuits et du
café, comment rêver mieux ?
1
Vue d’ensemble
du Machine Learning
Lorsqu’on leur parle de « Machine Learning », que l’on traduit en français par
« apprentissage automatique », la plupart des personnes s’imaginent un robot : un ser-
viteur fiable ou un Terminator redoutable, selon l’interlocuteur. Mais ce Machine
Learning n’est pas un rêve futuriste : c’est déjà une réalité. À vrai dire, il est présent
depuis des décennies dans certaines applications spécialisées telles que la reconnais-
sance optique de caractères ou OCR. La première application ML ayant véritablement
touché un large public, améliorant le quotidien de centaines de millions de per-
sonnes, s’est imposée dans les années 1990 : il s’agit du filtre anti-spam. S’il n’est pas
vraiment présenté comme tel, il possède pourtant techniquement les caractéristiques
d’un système d’apprentissage automatique (d’ailleurs, il a si bien appris que vous
n’avez que rarement à signaler un e-mail comme indésirable). Il a été suivi par des
centaines d’applications ML intégrées désormais discrètement dans des centaines de
produits et fonctionnalités que vous utilisez régulièrement, depuis les recommanda-
tions jusqu’à la recherche vocale.
Où commence l’apprentissage automatique, et où s’arrête-t‑il ? Lorsqu’on dit
qu’une machine apprend quelque chose, qu’est-ce que cela signifie ? Si je télécharge
Wikipédia sur mon ordinateur, ce dernier a-t‑il vraiment « appris » quelque chose ?
Est-il soudainement devenu plus intelligent ? Dans ce chapitre, nous allons com-
mencer par clarifier ce qu’est l’apprentissage automatique et les raisons qui peuvent
vous pousser à l’utiliser.
Puis, avant d’entreprendre d’explorer ce vaste territoire, nous en examinerons la
carte, découvrirons les principales régions et étudierons leurs particularités les plus
notables : apprentissage supervisé / apprentissage non supervisé, apprentissage en
ligne / apprentissage groupé, apprentissage à partir d’observations / apprentissage à
partir d’un modèle. Après quoi, nous nous intéresserons au déroulement d’un projet
2 Chapitre 1. Vue d’ensemble du Machine Learning
ML type, nous évoquerons les principales difficultés que vous pourriez rencontrer et
expliquerons comment évaluer et régler finement votre système.
Ce chapitre introduit un grand nombre de concepts fondamentaux (et de
jargon) que chaque spécialiste du traitement des mégadonnées doit connaître
par cœur. Il s’agira d’une présentation très générale (c’est le seul chapitre qui
ne comporte pratiquement pas de code) ; l’ensemble est assez simple, mais
assurez-vous que tout soit parfaitement clair pour vous. Préparez-vous un café, et
commençons !
De plus, si les pirates remarquent que leurs e-mails contenant le mot « Pour vous »
sont bloqués, ils peuvent décider d’écrire « For you » à la place. Un filtre anti-spam
utilisant des techniques de programmation traditionnelles nécessiterait une mise à
jour pour pouvoir intercepter les messages « For you ». Si les pirates continuent à
tenter de contourner votre filtre anti-spam, vous devrez sans arrêt écrire de nouvelles
règles.
Par contre, un filtre anti-spam basé sur des techniques de Machine Learning
repère automatiquement que « For you » est devenu inhabituellement fréquent dans
les messages indésirables signalés par les utilisateurs et il commence à en tenir compte
sans votre intervention (voir figure 1.3).
très différentes dans des environnements bruyants et dans des dizaines de langues
distinctes. La meilleure solution (du moins jusqu’à maintenant) consiste à écrire un
algorithme qui apprend par lui-même, à partir de nombreux enregistrements pour
chaque mot.
Enfin, l’apprentissage automatique peut aider les humains à apprendre (voir figure
1.4) : ses algorithmes peuvent être inspectés afin de découvrir ce qu’ils ont appris
(même si, pour certains algorithmes, cela peut s’avérer difficile). Ainsi, une fois que
le filtre anti-spam a été entraîné sur suffisamment de courriers frauduleux, on peut
l’inspecter aisément pour découvrir la liste des mots et combinaisons de mots qu’il
considère être les meilleurs prédicteurs de spam. Parfois, cela révélera des corrélations
insoupçonnées ou de nouvelles tendances, permettant ainsi d’avoir une meilleure
compréhension du problème.
Appliquer des techniques d’apprentissage automatique pour explorer de gros
volumes de données peut permettre d’y découvrir certains éléments de structuration
qui n’étaient pas immédiatement apparents. C’est ce qu’on appelle l’exploration des
données (en anglais, data mining).
Apprentissage supervisé
Dans l’apprentissage supervisé, les données d’entraînement que vous fournissez à l’al-
gorithme comportent les solutions désirées, appelées étiquettes (en anglais, labels),
comme sur la figure 1.5.
1. Pour la petite histoire, ce nom curieux est un terme statistique introduit par Francis Galton alors qu’il
étudiait le fait que les gens de grande taille ont tendance à avoir des enfants plus petits qu’eux. Les enfants
étant plus petits, il a nommé cela régression vers la moyenne. Ce nom fut alors donné aux méthodes qu’il
utilisait pour analyser les corrélations entre variables.
8 Chapitre 1. Vue d’ensemble du Machine Learning
Figure 1.7 – Un jeu d’entraînement non étiqueté pour apprentissage non supervisé
2. Certaines architectures de réseaux neuronaux peuvent être non supervisées, par exemple les auto-
encodeurs ou les machines de Boltzmann restreintes. Elles peuvent aussi être semi-supervisées, comme dans
le cas des réseaux de croyance profonds ou lorsqu’on utilise un pré-apprentissage non supervisé.