--- tags: Enseignement, MPI, Info 114, Introduction à la Science des données --- # Info 114: Introduction à la Science des Données ## Enseignants Cours: Isabelle Guyon <guyon@clopinet.com> TP: Nicolas M. Thiéry <Nicolas.Thiery@u-psud.fr> ## [Notes de cours](https://www.dropbox.com/sh/qun4oyd12sn5utr/AABXp2ok6YtiOVAl_4UoC_N0a) - [Introduction](https://www.dropbox.com/sh/qun4oyd12sn5utr/AABXp2ok6YtiOVAl_4UoC_N0a?preview=Introduction.pptx) - [Chapter 1: How to become a Data Scientist in ONE hour :-)](https://www.dropbox.com/sh/qun4oyd12sn5utr/AABXp2ok6YtiOVAl_4UoC_N0a?preview=Chapter1.pptx) - [Chapter 2: Exploratory analysis](https://www.dropbox.com/sh/qun4oyd12sn5utr/AABXp2ok6YtiOVAl_4UoC_N0a?preview=Chapter2.pptx) - [Chapter 3: First POM explorations and project selection](https://www.dropbox.com/s/1l95tlgvxjk2mxr/Chapter3.pptx) - [Chapter 4: POM tricks of the trade](https://www.dropbox.com/s/ui3u14fv32qjas9/Chapter4.pptx?dl=0) - [Chapter 5: Neural networks and deep learning](https://www.dropbox.com/s/if6g2padjs3b6nw/Chapter5.pptx?dl=0) - [Chapter 6: From LMS to back-prop](https://www.dropbox.com/s/m5mftr97sktddzb/Chapter6.pptx?dl=0) - [Chapter 7: Big data versus Good data](https://www.dropbox.com/s/3n480qa7doaxmfr/Chapter7.pptx?dl=0) ## Références Hands-On Machine Learning with Scikit-Learn and TensorFlow, O'Reilly (Aurélien Géron); nouvelle édition 11 octobre ## Glossaire | Anglais | Français | Presque synonymes | | ------- | -------- | -------------- | | feature | variable | caractéristique, colonne, attribut | | sample | exemple | ligne, échantillon, pattern | | table | tableau | matrice | | target | objectif | label, vérité terrain, ground truth, output,... | ## Instructions pour le TP 1 (HW1) Comme en Info 111, nous utiliserons l'environnement interactif Jupyter, mais cette fois avec le langage de programmation Python. ### 1. Ouvrez un terminal `Applications -> Terminal` ### 2. Récupérez les sujets et travaillez sur les fiches Jupyter dans `Info114/HW1` 1. Préparez votre dossier avec les commandes suivantes: mkdir ~/Info114 cd ~/Info114 2. Récupérez le sujet de TP: info-114 fetch HW1 Si jamais il y a une erreur `command info-114 not found`, utiliser à la place (ici et plus loin): /public/info-114/bin/info-114 3. Ouvrez Jupyter info-114 jupyter notebook Note: en salle de TP, vous pouvez comme la semaine dernière récupérer les sujets depuis Jupyter avec: Assignment -> cours Info114 -> fetch sur HW1 ### Errata pour la version originale 00-tableau.ipynb: - T[1,2]: c'est pour la deuxieme ligne et troisieme colonne - C'est de T3D qu'il faut extraire les trois premieres colones 01-images.ipynb: - Pour extraire le canal des rouges, faire R = M[:,:,0] * 1. Pour que les valeurs soient stockées en nombre flottants. Sinon elles sont stockées sur es entiers courts (entre 0 et 255), et les calculs arithmétiques vont déborder. Par exemple, on aurait: $255+1 = 0$ . Vous ne pouvez pas modifier l'exemple donné, mais vous pouvez insérer une nouvelle cellule (Insérer -> Cellule -> après) - avant G+R, le texte devrait être: «Il est maintenant facile de faire de l'arithmétique sur tous les pixels. Par exemple la somme des intensités en vert et rouge s'écrit:» ## Instructions pour le TP 2 (HW2) 1. Ouvrez les notes du cours (voir ci-dessus) 2. Récupérez le sujet comme pour le TP 1 (remplacer `HW1` par `HW2`) 3. Ouvrez la feuille de travail `data_analysis` et suivez les instructions qui s'y trouvent. ### Errata pour le TP 2 Les liens vers les feuilles foreground-extractiono et feature-extraction sont cassés (`_` au lieu de `-`); ouvrir les feuilles depuis le navigateur de fichier. couleurs de fond, ... ## Instructions pour le TP 3 (HW3) 1. Ouvrez les notes du cours (voir ci-dessus) 2. Récupérez le sujet comme pour le TP 1 (remplacer `HW1` par `HW3`) 3. Ouvrez la feuille de travail `data_analysis` puis `project_selection` et suivez les instructions qui s'y trouvent. ## Errata pour le TP 3 - Hint: utiliser `ls` plutôt que `glob.glob`. Ou alors importer `glob.glob` - `RL_data.csv` -> `RE_data.csv` - Hint to load csv with panda: use `pd.read_csv` - On ne veut pas travailler sur le fichier des métadatas, mais il est lui aussi en `.csv`. Il faut donc importer seulement les fichiers se terminant par `_data.csv` - 2.3 systematic_data_experiment(data_name, all_scaled_data_df, sklearn_model, sklearn_metric) à remplacer par systematic_data_experiment(data_name, all_data_df, sklearn_model, sklearn_metric) - 2.3-4 assigner le résultat de systematic_data_experiment à result_noscaling et result_scaling - 2.6 utiliser .plot.bar() plutôt que .hist pour créer un histogamme. Notes pour l'année prochaine: - enlever les raccourcis np, pd, ls, importer les vrais modules - donner un exemple de read_csv ## Projet Téléchargez le dossier commun pour le projet: cd ~/Info114 curl -s http://Nicolas.Thiery.name/Project.tgz -o - | tar zxvf - Pour chaque sujet de projet il y a un sous répertoire (par exemple `Project/2.segmentation`, avec du code et éventuellement un jeu de donnée spécifique. En sus, il y a du code commun dans `Project/utilities`. ### Jeu de données Le jeu de données principal du projet est trop gros pour que chacun d'entre vous en fasse une copie. Au lieu de cela, il est installé une fois pour toute sur le système, comme les logiciels du cours (il est en cours d'installation sur JupyterHub). Pour y accéder depuis Python, vous utiliserez la commande suivante qui vous indiquera dans quel dossier le jeu de donnée est installé: import os.path data_dir = os.path.join(os.path.split(os.path.split(sys.executable)[0])[0], 'share', 'info-114-data', 'Project') En salle de TP, `data_dir` vaudra: /public/info-114/miniconda3/envs/info-114/share/info-114-data/Project/ Ensuite vous pourrez, par exemple, remplacer: meta_data_dir = '../mini-dataset/meta-data' par: meta_data_dir = os.path.join(data_dir,'/meta-data') Si vous souhaitez vraiment télécharger le jeu de données (par exemple pour travailler sur colab), vous pouvez faire: git clone https://gitlab.u-psud.fr/Info114/Data.git ### Espaces collaboratifs - [Projet dataset](/P2eRdPTfSeSXfGEX9fsuIw) - [Projet segmentation](/Y8S49ShPQmGckI_t_zmcxA) - [Projet classifieurs](/J5cOBtokRvmINMg4DbCg9A) - [Projet représentation](/Q4xlxt_6QbSJDMkmFCdyYg) - [Projet biais](/6GewVo7vTX2h1LLGSplZrg) - [Projet apprentissage profond](/LR3YEo9SS9WsOBNIvOMiiQ) ## Deuxième session ### Questions de cours Se préparer À L'AVANCE pour des questions de cours qui viennent des QUIZ 1 et 2: 1. Moyenne : Quelle est la moyenne de [1, 2, 3, 4, 5, 6, 7, 8, 9] 2. Médiane : Quelle est la médiane de [1, 2, 3, 4, 5, 6, 7, 8, 9] 3. Variance : Mettez un cercle autour de l’échantillon a la plus grande variance : [1, 3, 5, 7, 9] [1,2,3,4,5] 4. Écart type : Quelle est l’écart type de [-1, 1, -1, 1, -1, 1, -1, 1] 5. Corrélation : On appelle « standardisation » d’un échantillon l’opération qui consiste à soustraire la moyenne puis diviser par l’écart type. Quelle est la formule de la corrélation pour deux échantillons x = [x_1, x_2, x_3, … x_n] et y = [y_1, y_2, y_3, …, y_n] standardisés ? 6. Exemple. Un tableau de données a habituellement les exemples en ligne et les variables en colonnes. Quels sont les synonymes d’ « exemple » : sample (English) ligne (Français) line (English) échantillon (Français) individu (Français) pattern (English) forme (Français) patient (médical) image (computer vision) client (marketing) sujet (Français) subject (English) 7. Variables. Quels sont les synonymes de « variables » : feature (English) caractéristique (Français) colonne (Français) column (English) attribute (English) attribut (Français) pixel (computer vision) 8. Tableau. Quels sont les quasi-synonymes de « tableau » : table (English) matrice (Français) matrix (English) array (English) 9. Vecteur. Quels sont les quasi-synonymes de « vecteur » : vector (English) list (English) liste (Français) collection (Français) 10. Vérité terrain. Quels sont les synonymes de « vérité terrain » : target (English) valeur cible (Français) ground truth (English) truth value (English) label (French/English) output (English) valeur désirée (Français) 11. Barres d’erreurs : On définit l’ « error rate » (taux d’erreurs) comme la la fraction d’erreurs des exemples de test. Quelle variabilité une barre d’erreurs de l’error rate pourrait-elle mesurer ? celle de l’ensemble d’apprentissage celle de l’ensemble de test celle de l’initialisation des algorithmes qui ont des facteurs aléatoires celle d’autres facteurs aléatoires des algorithmes 12. Méthode de base : Nommez une méthode de classification de base 13. Types d’erreur : Quel est le pire type d’erreur, les erreurs de Type I (faux positifs) ou les erreurs de Type II (faux négatifs) ? - Ça n’a pas d’importance - Type I - Type II - Ça dépend de l’application 14. Corrélation. Le concept le plus important en science des données est celui de co-variance/corrélation/dépendance entre variables qui permet de quantifier si une variable peut être prédite à partir d'une autre. En utilisant le cours https://www.dropbox.com/s/1l95tlgvxjk2mxr/Chapter3.pptx et la page Wikipedia, répondre VRAI ou FAUX? - Corrélation n'implique pas causalité - Le coefficient de corrélation de Pearson est une mesure de dépendance linéaire - Il existe d'autres coefficients de corrélation que celui de Pearson - corr(X, Y) = corr(Y, X) - Si X et Y sont indépendantes alors corr(X, Y) = 0 - Si corr(X, Y) = 0 alors X et Y sont indépendantes - Si on standardise X et Y (soustrait la moyenne et divise par l'écart type) on ne change pas corr(X, Y) - Le coefficient de correlation dépend de l'échelle (ou de l'unité) des variables - corr(X, -X) = -1 - La matrice de corrélation est anti-symétrique - Dans un scatter-plot ou tous les points sont alignés, plus la pente est élevée, plus la corrélation est grande - Dans un scatter plot ou les points sont dispersés, la corrélation est plus grande si les points sont presque alignés - Dans un scatter plot ou les points sont sur un cercle les variables sont dépendante mais la corrélation est nulle - La corrélation est la covariance de deux variables standardisées - La variance des variables influe sur leur corrélation - corr(X, X) = 1 - corr(aX+b, cY+d) = corr(X, Y) pour tous nombres a, b, c, d - Si on standardise X et Y, corr(X, Y) est proportionel au produit scalaire de X et Y - Pour des vecteurs centrés, corr(X, Y) est le cosinus de l'angle entre X et Y - Pour prédire une variable Y il est aussi utile d'utiliser une variable corrélée qu'une variable anti-corrélée ### Diapos Nous envoyer A L'AVANCE (avant le 30 juin à 23h59) 10 diapos présentant le projet effectué, selon le [schema général fourni en classe](https://docs.google.com/presentation/d/1G0oqnbelonvi5WB6BU_lKxP7TcGncd4LPZxN4qGBXwA/edit#slide=id.g656157fc01_2_135) par email à Nicolas.Thiery@u-psud.fr ET iguyon@lri.fr LES ÉTUDIANTs N’AYANT PAS FOURNI LEURS DIAPOS A L’AVANCE AURONT ZERO EN DEUXIEME SESSION. Les binomes doivent chacun et INDIVIDUELLEMENT préparer une présentation. Cas particulier étudiant arrivé en cours de semestre: Préparer une présentation de 10 diapos expliquant les méthodes suivantes illustrées sur la page: https://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html#sphx-glr-auto-examples-classification-plot-classifier-comparison-py <https://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html#sphx-glr-auto-examples-classification-plot-classifier-comparison-py> Titre (1 slide, indiquer son nom) Introduction (1 slide): contexte, qu’est-ce qu’un problème de classification; exemples de la vie réélle Data (1 slide): Description des données montrée sur la page web citée ci-dessus; ce sont des exemples jouets en 2 dimensions; pourquoi ces exemples sont-ils interessants? Que représentent les figures (hint: voir scatter plots) Nearest neighbors (2 slides) Decision tree (2 slides) Neural net (2 slides) Pour chacun des 3 algorithmes ci-dessus: - description de l’algorithme; - dans quelle situation est-ce un bon algorithme à utiliser: avantages, inconvénients; cas des grands et petit nombres d’exemples et des grands et petit nombres de variables - expliquer la forme des surfaces de decision - comment controller l’over-fitting (si nécessaire) Conclusion (1 slide): qu’avez-vous appris? ### Le jour de l’examen: - presentation orale 10 min + 5 min questions - deux questions de cours (parmi celles à préparer) : 5 min. ### Barème /20: - clareté de l’exposé, logique de l’enchaînement des idées, et respects des consignes : 5 points - compréhension des méthodes employées, qualités techniques, résultats décrits : 5 points - charisme, qualité esthétique de la présentation (y compris des illlustrations) : 5 points - questions de cours : 5 points ## Serveur JupyterHub Comme pour Info 111, vous pourrez travailler sur vos fiches de TP et projet à distance en utilisant le serveur JupyterHub de Paris Sud. Voir les [instructions pour Info 111](http://nicolas.thiery.name/Enseignement/Info111/logiciels/jupyter.html#jupyterhub), en ajustant 111 par 114. ## Installer les logiciels sur votre propre machine (pour les expérimentés) Suivre les [instructions similaires pour le cours Info111](http://nicolas.thiery.name/Enseignement/Info111/logiciels/jupyter-installation), en utilisant le dépot git suivant à la place d'`Info111-notebooks`: https://gitlab.u-psud.fr/Info114/sujets ## De C++ à Python Vous trouverez ci-dessous quelques notes à propos du langage de programmation Python - pas besoin de déclarer les variables - pas de `;` entre les instructions - les instructions sont séparées par des sauts de ligne - les blocs sont déterminés par l'indentation (et non les {}) Affectations: x = 42 s = "Bonjour!" f = 3.14159 Un `if` en C++: if ( x < 10 ) { ...; ...; } else { ...; } Le même `if` en Python: if x < 10: ... ... else: ... Une boucle for en C++: for (int i = 0; i < 10 ; i++) { cout << i << endl; } La même boucle `for` en Python: for i in range(0, 10): print(i) Les *compréhensions* en Python: comment construire des listes avec une syntaxe proche des mathématiques. Essayez les commandes suivantes: range(5, 10) range(5, 95, 10) [ 2*i for i in range(0, 10) ] [ i**2 for i in range(0, 10) ] ## Utiliser une compréhension pour fabriquer une image; essayer les commandes suivantes: | Coluhgvmn 1 | Column 2 | Column 3 | | -------- | -------- | -------- | | Text | Text | Text | def cercle(x,y,r): return Point([x,y]).buffer(r).boundary cercle(0,0,1) cascaded_union([cercle(0,0,1), cercle(0,0,2), cercle(0,0,3)]) cascaded_union( [ cercle(0,0,r) for r in range(10) ]) ## Fonctions mathématiques usuelles from math import sin, cos sin(3.14) ## Définir une fonction En C++: int f(int x, int y, int r) { return x + y - r } En Python: def f(x, y, r): return x + y - r