Le Machine Learning avec Python
De la théorie à la pratique
Editions Eni
Préface
Introduction générale
Avant-propos
1. Pourquoi ce livre ?19
2. À qui s'adresse ce livre ?21
3. Comment est organisé ce livre ?23
4. Comment lire ce livre ?24
5. Quels sont les prérequis pour la lecture de ce livre ?25
6. Qui est l'auteur ?25
7. Remerciements27
Partie 1 : La Data Science - Concepts généraux
Chapitre 1-1
La Data Science
1. Objectif du chapitre29
2. L'objectif recherché en Machine Learning30
3. Une expérimentation Machine Learning34
3.1 Types de données42
3.2 Préparation des données44
4. Cycle de vie d'un projet Data Science47
5. Les algorithmes du Machine Learning50
6. Le problème de surapprentissage52
7. Les paramètres et les hyperparamètres53
8. Validation croisée55
9. Données d'entraînement, de validation et de test59
10. Métriques de performance60
10.1 Métriques pour les problèmes de régression62
10.2 Métriques pour la classification65
10.2.1 Matrice de confusion binaire65
10.2.2 Matrice de confusion générale67
10.2.3 Exemple de matrice de confusion68
10.2.4 La courbe ROC70
10.3 Métriques pour le clustering71
11. Conclusion71
Partie 2 : Outils techniques de la Data Science - Python, NumPy, Pandas et Jupyter
Chapitre 2-2
Le langage Python
1. Objectif du chapitre73
2. Python en deux mots74
3. Installer l'interpréteur Python74
4. Les bases de la programmation Python77
4.1 Hello world avec Python77
4.1.1 La fonction print77
4.1.2 La fonction input81
4.2 Les structures de données81
4.2.1 Les variables numériques82
4.2.2 Les chaînes de caractères87
4.2.3 Le type booléen89
4.2.4 Les listes95
4.2.5 Les tuples98
4.2.6 Les dictionnaires99
4.2.7 Les ensembles101
4.2.8 Liste vs tuple vs dictionnaire vs ensemble105
4.3 Structurer un code Python106
4.3.1 L'indentation et les blocs de code106
4.3.2 Écrire une instruction sur plusieurs lignes107
4.3.3 Écrire plusieurs instructions sur une ligne109
4.3.4 Les commentaires en Python109
4.4 Les instructions conditionnelles109
4.4.1 Les conditions avec la structure if110
4.4.2 Les conditions avec la structure if-else111
4.4.3 Les conditions avec la structure if-elif-else112
4.5 Les boucles114
4.5.1 La boucle for114
4.5.2 La boucle for et la fonction zip119
4.5.3 La boucle while125
4.5.4 Contrôler les boucles avec break126
4.5.5 Contrôler les boucles avec continue127
4.6 Les fonctions128
4.6.1 Définir et utiliser une fonction sans paramètre129
4.6.2 Les fonctions avec paramètres131
4.6.3 Les valeurs par défaut des paramètres133
4.6.4 Renvoi de résultats136
4.6.5 La portée des variables137
4.6.6 Passage d'arguments à une fonction140
4.6.7 Les fonctions récursives143
4.7 Les listes en compréhension148
4.7.1 Les origines des listes en compréhension148
4.7.2 Construire une liste avec les listes en compréhension.149
4.7.3 Application de fonction avec une liste en compréhension150
4.7.4 Utiliser if-else avec les listes en compréhension151
4.7.5 Filtrer avec les listes en compréhension152
4.8 Les expressions régulières152
4.8.1 Regex sans caractères spéciaux155
4.8.2 Regex avec caractères spéciaux157
4.8.3 Regex avec les multiplicateurs159
4.8.4 Regex avec un nombre d'occurrences limité162
4.8.5 Regex avec groupage des résultats163
4.8.6 Taille des motifs164
4.8.7 Aller plus loin avec les expressions régulières169
4.9 Gestion des exceptions170
4.9.1 La levée des exceptions170
4.9.2 Utiliser le bloc try-except172
4.9.3 Gérer plusieurs exceptions173
4.9.4 Utiliser la clause finally175
4.9.5 Utiliser la structure try-except-finally-else176
4.9.6 Lever une exception avec raise178
5. Conclusion180
Chapitre 2-2
La bibliothèque NumPy
1. Objectif du chapitre181
2. NumPy en deux mots182
3. Les tableaux NumPy182
3.1 Création de tableaux NumPy182
3.1.1 Créer un tableau à une dimension183
3.1.2 Créer un tableau à plusieurs dimensions183
3.2 Les dimensions d'un tableau NumPy185
3.3 Le type et la taille d'un tableau NumPy187
3.4 Fonction d'initialisation de tableaux NumPy189
4. Accéder aux données d'un tableau NumPy191
4.1 Accès aux données d'un tableau à une dimension191
4.2 Accès aux données d'un tableau à deux dimensions193
4.3 Accès aux données d'un tableau à trois dimensions195
5. Modifier les données d'un tableau NumPy196
6. Copier un tableau NumPy dans un autre tableau NumPy197
7. Algèbre linéaire avec NumPy199
7.1 Opérations mathématiques de base avec NumPy199
7.2 Opérations sur les matrices avec NumPy201
8. Réorganiser des tableaux NumPy202
8.1 Restructurer un tableau NumPy202
8.2 Superposer des tableaux NumPy204
9. Statistiques descriptives avec NumPy205
10. Lire des données NumPy à partir d'un fichier207
11. Les masques booléens avec NumPy208
11.1 Créer et utiliser un masque booléen208
11.2 Un masque avec plusieurs conditions210
11.3 Les fonctions numpy.any et numpy.all211
12. Tableaux NumPy versus listes Python213
12.1 Comparaison des tailles en mémoire214
12.2 Comparaison des temps de calcul215
12.2.1 Temps de calcul sur une liste Python216
12.2.2 Temps de calcul sur un tableau NumPy217
13. Conclusion218
Chapitre 2-3
La bibliothèque Pandas
1. Objectif du chapitre219
2. C'est quoi, Pandas ?220
3. Installation de Pandas221
4. DataFrame Pandas222
4.1 Création d'un DataFrame à partir d'un dictionnaire223
4.2 Création d'un DataFrame à partir d'un tableau NumPy225
4.3 Chargement des données à partir de fichiers226
4.3.1 Lecture des données d'un fichier CSV227
4.3.2 Lecture d'un fichier texte228
5. Accès aux données d'un DataFrame229
5.1 Lire les lignes d'un DataFrame230
5.1.1 Lire une ligne d'un DataFrame230
5.1.2 Lire plusieurs lignes d'un DataFrame230
5.1.3 Parcourir les lignes d'un DataFrame231
5.1.4 Filtrer les lignes avec une condition232
5.1.5 Filtrer les lignes avec plusieurs conditions232
5.1.6 Filtrage avec des critères textuels233
5.1.7 Réinitialiser les index234
5.1.8 Filtrer avec les valeurs uniques236
5.1.9 Filtrer avec une expression régulière236
5.2 Accéder aux variables d'un DataFrame237
5.2.1 Liste des variables d'un DataFrame237
5.2.2 Accès aux valeurs d'une colonne238
5.2.3 Accès à plusieurs colonnes238
5.3 Lire une cellule spécifique avec les index239
6. Modifier un DataFrame239
6.1 Modifier les valeurs dans un DataFrame239
6.2 Modifier la structure d'un DataFrame240
6.2.1 Ajouter une variable à un DataFrame240
6.2.2 Réordonner les variables d'un DataFrame243
6.2.3 Supprimer une variable d'un DataFrame244
6.2.4 Utiliser la méthode melt pour diminuer le nombre de variables245
6.3 Appliquer une fonction sur une variable avec la méthode apply247
6.4 Modification avec conditions249
6.5 Ajouter des lignes dans un DataFrame250
7. Tri sur les données d'un DataFrame251
7.1 Tri avec un seul critère251
7.2 Tri avec plusieurs critères253
8. Sauvegarder les données d'un DataFrame254
9. Faire des statistiques sur un DataFrame255
9.1 Faire un résumé direct255
9.2 Faire un résumé par agrégation256
9.3 Agrégation avec plusieurs paramètres258
10. Lecture des fichiers de grande taille259
11. Conclusion261
Chapitre 2-4
Travailler avec Jupyter
1. Objectif du chapitre263
2. Installation de l'environnement Anaconda et Jupyter264
3. Travailler avec Jupyter270
3.1 Les documents dans Jupyter272
3.1.1 Créer un dossier273
3.1.2 Renommer un dossier274
3.1.3 Déplacer un dossier275
3.1.4 Charger des documents276
3.1.5 Supprimer des éléments277
3.1.6 Navigation dans l'arborescence des dossiers278
3.1.7 Créer un notebook279
3.2 Utiliser un notebook Jupyter280
3.2.1 Renommer un notebook280
3.2.2 Les cellules Jupyter281
3.2.3 Les fonctionnalités d'un notebook285
3.3 Utiliser les widgets Jupyter291
3.3.1 Le widget FloatSlider291
3.3.2 Associer une fonction à un slider292
3.3.3 Le widget interact294
3.3.4 Le widget Image296
3.3.5 Le widget DatePicker296
4. Conclusion297
Partie 3 : Les statistiques
Chapitre 3-1
Statistiques
1. Objectif du chapitre299
2. Les statistiques descriptives300
2.1 Paramètres de position300
2.1.1 La moyenne300
2.1.2 Le mode301
2.1.3 La médiane301
2.1.4 Les quartiles304
2.2 Paramètres de dispersion304
2.2.1 La variance305
2.2.2 Calcul de la variance avec la formule de Koenig305
2.2.3 L'écart-type305
2.2.4 L'écart interquartile306
3. Les lois de probabilité306
4. La loi normale308
5. L'échantillonnage312
5.1 Principe de l'échantillonnage312
5.2 Résultats sur la distribution des moyennes313
5.3 Résultats sur la distribution des proportions322
5.4 Théorème central limite326
6. Les statistiques inférentielles327
6.1 Estimation ponctuelle328
6.2 Estimation de la moyenne par intervalle de confiance332
6.3 Estimation d'une proportion par intervalle de confiance336
6.4 Test d'hypothèse340
6.4.1 Tests paramétriques341
6.4.2 Tests non paramétriques341
6.4.3 Construire un test d'hypothèse342
6.5 Types de tests d'hypothèse345
6.5.1 Test de conformité345
6.5.2 Test d'adéquation346
6.5.3 Tests d'homogénéité347
6.5.4 Test d'indépendance de variables348
6.6 Exemple numérique de test de conformité d'une moyenne349
6.7 Le paradoxe de Simpson352
7. Conclusion354
Partie 4 : Les grands algorithmes du Machine Learning
Chapitre 4-1
La régression linéaire et polynomiale
1. Objectif du chapitre355
2. La régression linéaire simple356
2.1 La régression linéaire simple de point de vue géométrique357
2.2 La régression linéaire simple de point de vue analytique358
2.2.1 La méthode des moindres carrés358
2.2.2 Quelques considérations statistiques sur les données360
3. La régression linéaire multiple361
3.1 La méthode des moindres carrés pour la régression multiple362
3.2 La méthode de la descente de gradient363
3.3 Exemple de régression linéaire multiple364
3.3.1 Définition du jeu de données utilisées364
3.3.2 Régression linéaire multiple avec Scikit-learn365
3.3.3 Importer les modules Scikit-learn366
3.3.4 Lecture des données dans un DataFrame367
3.3.5 Normalisation des données368
3.3.6 Construction d'un modèle linéaire371
3.3.7 Evaluation d'un modèle linéaire373
3.3.8 Evaluer le futur comportement d'un modèle377
3.3.9 Cross-validation avec KFold380
4. La régression polynomiale388
4.1 Exemple de régression polynomiale389
4.1.1 Construction d'un modèle polynomial389
4.1.2 Le coefficient de détermination R2396
4.1.3 R2 et les valeurs extrêmes398
4.1.4 Modèle polynomial et surapprentissage398
5. Aller plus loin avec les modèles de régression404
5.1 La régularisation Lasso404
5.2 La régularisation Ridge405
6. Conclusion405
Chapitre 4-2
La régression logistique
1. Objectif du chapitre407
2. La régression logistique408
3. Prédire les survivants du Titanic412
3.1 Définition du jeu de données Titanic412
3.2 Réalisation du modèle de régression logistique413
3.2.1 Chargement des modules Scikit-learn413
3.2.2 Lecture des données414
3.2.3 Traitement des valeurs manquantes415
3.2.4 Transformation de variables416
3.2.5 Sélection des variables418
3.2.6 Traitement des variables catégorielles420
3.2.7 Entraînement du modèle logistique421
3.2.8 Le seuil de décision422
4. L'algorithme One-vs-All426
5. Conclusion426
Chapitre 4-3
Arbres de décision et Random Forest
1. Objectif du chapitre427
1.1 Construction d'un arbre de décision428
1.2 Prédire la classe d'appartenance avec un arbre de décision431
1.3 Considérations théoriques sur les arbres de décision432
1.3.1 Choix de la variable de segmentation433
1.3.2 Profondeur d'un arbre de décision434
2. Problème de surapprentissage avec un arbre de décision439
3. Random Forest439
4. Exemple de Random Forest avec Scikit-learn440
5. Conclusion446
Chapitre 4-4
L'algorithme k-means
1. Objectif du chapitre447
2. k-means du point de vue géométrique448
3. k-means du point de vue algorithmique455
4. Application de k-means avec Scikit-learn457
5. L'algorithme k-means et les valeurs extrêmes464
6. Choisir le k de k-means470
6.1 Déterminer k avec la méthode Elbow473
6.2 Déterminer k avec le coefficient de silhouette479
7. Les limites de k-means485
8. Avantages et inconvénients de l'algorithme k-means490
9. Quelques versions de l'algorithme k-means491
10. Conclusion491
Chapitre 4-5
Support Vector Machine
1. Objectif du chapitre493
2. Le SVM du point de vue géométrique494
3. Le SVM du point de vue analytique498
4. Données non linéairement séparables503
4.1 Le Kernel Trick505
4.2 La condition de Mercer507
4.3 Exemple de fonction noyau507
5. Détecter les fraudes de cartes de crédit508
5.1 Les données des transactions de cartes de crédit508
5.2 Application de l'algorithme SVM pour la détection des transactions bancaires frauduleuses509
5.2.1 Application de l'algorithme SVM sur les données creditcard.csv509
5.2.2 Application du SVM sur un sous-ensemble de creditcard.csv516
5.2.3 Application du SVM sur des données normalisées518
5.3 Les paramètre de l'algorithme SVM523
5.3.1 Le paramètre Kernel pour la variation de la fonction noyau524
5.3.2 Le paramètre C525
5.3.3 Le paramètre Gamma529
5.3.4 Le paramètre C versus le paramètre Gamma531
5.3.5 Tuning des hyperparamètres d'un SVM avec GridSearchCV531
6. Conclusion535
Chapitre 4-6
Analyse en composantes principales
1. Objectif du chapitre537
2. Pourquoi l'ACP ?538
3. L'ACP du point de vue géométrique540
4. L'ACP du point de vue analytique542
5. Indicateurs de la qualité de la représentation des données545
5.1 Indicateurs liés aux individus545
5.1.1 Score des individus546
5.1.2 Qualité de la représentation des individus546
5.1.3 Contribution des individus546
5.2 Indicateurs liés aux variables547
5.2.1 Le cercle des corrélations547
5.2.2 Qualité de la représentation des variables548
5.2.3 Contribution des variables549
6. Exemple d'ACP avec Python549
6.1 Déterminer le nombre de facteurs pertinents554
6.2 Interprétation des résultats sur les individus559
6.2.1 Représentation des individus560
6.2.2 Calcul de la qualité de la représentation des individus564
6.2.3 Calcul de la contribution des individus565
6.3 Interprétation des résultats sur les variables566
6.3.1 Tracer un cercle des corrélations566
6.3.2 Calcul de la qualité de la représentation des variables.569
6.3.3 Calcul des contributions des variables570
6.4 Représentation de nouveaux individus571
7. Conclusion573
Chapitre 4-7
Les réseaux de neurones
1. Objectif du chapitre575
2. Modélisation d'un neurone artificiel576
2.1 Le neurone biologique577
2.2 Le neurone artificiel578
3. Architecture d'un réseau de neurones580
4. L'algorithme de rétropropagation583
5. Exemple d'un réseau de neurones avec Scikit-learn594
6. Conclusion601
Partie 5 : Le Deep Learning et le traitement automatique du langage
Chapitre 5-1
Le Deep Learning avec TensorFlow
1. Objectif du chapitre603
2. Le Deep Learning : notions générales604
2.1 Réseau de neurones avec plusieurs couches d'entrée607
2.2 Réseau de neurones avec plusieurs couches de sortie608
2.3 Réseau de neurones avec des branchements conditionnels609
2.4 Réseau de neurones avec de la récurrence RNN610
2.5 Réseau de neurones avec couches de convolution CNN611
2.6 Éviter le surapprentissage avec les couches Dropout613
2.7 Le Transfer Learning615
3. Introduction à TensorFlow619
3.1 Installer TensorFlow619
3.1.1 Créer un environnement virtuel620
3.1.2 Installer des bibliothèques dans un environnement virtuel avec Anaconda624
3.1.3 Installer la bibliothèque TensorFlow626
3.1.4 Tester TensorFlow627
3.2 Opérations élémentaires avec les tensors628
3.2.1 Travailler avec les tensors629
3.2.2 Les tensors variables633
3.2.3 Initialiser les tensors633
3.2.4 Opérations algébriques avec les tensors634
4. Les réseaux de neurones avec Sequential API635
4.1 Charger les données636
4.2 Définir un MLP avec Sequential API641
4.3 Accéder aux éléments d'un réseau de neurones643
4.4 Initialisation des poids et des biais d'un réseau de neurones645
4.5 Compiler un réseau de neurones647
4.6 Entraîner un réseau de neurones648
4.7 Analyser les résultats de l'entraînement d'un réseau de neurones650
4.8 Évaluer un réseau de neurones652
4.9 Prédire avec un réseau de neurones pour la classification652
5. Utiliser Functional API654
5.1 Un modèle Functional API avec plusieurs couches d'entrée655
5.2 Un modèle Functional API avec plusieurs couches de sortie658
6. Opérations avancées sur les réseaux de neurones661
6.1 Monitorer un réseau de neurones661
6.1.1 Contrôler les critères d'arrêt avec les callbacks661
6.1.2 TensorBoard664
6.1.3 Sauvegarder un réseau de neurones668
6.1.4 Charger et utiliser un réseau de neurones668
6.2 Réseaux de neurones de convolution670
6.3 Réutiliser un réseau de neurones674
6.4 Le Transfer Learning676
6.4.1 Chargement des données locales678
6.4.2 Chargement du modèle VGG16679
6.4.3 Extraction des features679
6.4.4 Étendre un modèle680
6.4.5 Chargement des données de test pour le Transfer Learning681
7. Aller plus loin avec le Deep Learning et TensorFlow684
8. Conclusion685
Chapitre 5-2
Le traitement automatique du langage
1. Objectif du chapitre687
2. NLP : concepts généraux688
2.1 Le nettoyage des données textuelles690
2.1.1 Suppression des stopwords690
2.1.2 Appliquer le Stemming sur un texte692
2.1.3 Appliquer la Lemmatization sur un texte692
2.1.4 Stemming versus Lemmatization692
2.2 Vectorisation des données textuelles693
2.2.1 La vectorisation par comptage d'occurrences des mots694
2.2.2 La vectorisation avec TF-IDF696
2.2.3 La vectorisation avec N-Gram698
2.2.4 Feature Engineering sur des documents699
3. Exemple complet pour la détection des spams700
3.1 Installation de la NLTK701
3.2 Modèle de détection de spams702
4. Conclusion709
Annexe
La programmation orientée objet avec Python
1. Programmation orientée objet avec Python711
1.1 Pourquoi la programmation orientée objet ?711
1.2 Classes et objets713
1.2.1 Définir une classe713
1.2.2 La fonction _init_714
1.2.3 Instanciation d'un objet716
1.2.4 Les attributs d'un objet717
1.2.5 Les méthodes d'objet719
1.2.6 Les attributs de classe721
1.2.7 Les méthodes de classe722
1.2.8 Les méthodes statiques724
1.2.9 Sécuriser les attributs725
1.3 L'héritage729
1.3.1 L'héritage simple729
1.3.2 L'héritage multiple733
1.4 Les classes abstraites735
1.5 Les interfaces737
1.6 Les méthodes spéciales741
1.6.1 Afficher un objet avec la fonction print()741
1.6.2 Personnaliser les accès aux attributs d'une classe744
1.6.3 Vérifier la validité d'un attribut745
1.6.4 Comparer deux objets747
1.6.5 Rendre les objets callable748
2. Les modules749
2.1 Importer des modules750
2.2 Le module principal753
3. Pour aller plus loin avec Python756