Try   HackMD

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

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

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