TP 1 M1 Informatique Apprentissage Automatique. Premières classifications : apprentissage et évaluation



Documents pareils
Travaux pratiques avec RapidMiner

Introduction au Data-Mining

Introduction au Data-Mining

LA NOTATION STATISTIQUE DES EMPRUNTEURS OU «SCORING»

Algorithmes d'apprentissage

Deuxième Licence en Informatique Data Warehousing et Data Mining La Classification - 1

INTRODUCTION AU DATA MINING

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Pourquoi l apprentissage?

Projet SINF2275 «Data mining and decision making» Projet classification et credit scoring

Exercices du Cours de la programmation linéaire donné par le Dr. Ali DERBALA

Python - introduction à la programmation et calcul scientifique

Reconstruction de bâtiments en 3D à partir de nuages de points LIDAR

données en connaissance et en actions?

Cours 7 : Utilisation de modules sous python

L apprentissage automatique

TP 1. Prise en main du langage Python

Introduction aux outils BI de SQL Server Fouille de données avec SQL Server Analysis Services (SSAS)

Etude des propriétés empiriques du lasso par simulations

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Chapitre 2 Le problème de l unicité des solutions

Déroulement d un projet en DATA MINING, préparation et analyse des données. Walid AYADI

3. SPÉCIFICATIONS DU LOGICIEL. de l'expression des besoins à la conception. Spécifications fonctionnelles Analyse fonctionnelle et méthodes

Fonctions de plusieurs variables, intégrales multiples, et intégrales dépendant d un paramètre

Transmission d informations sur le réseau électrique

UFR de Sciences Economiques Année TESTS PARAMÉTRIQUES

Arbres de Décision. 1 Introduction

Le Data Mining au service du Scoring ou notation statistique des emprunteurs!

Modèles à Événements Discrets. Réseaux de Petri Stochastiques

Introduction à l approche bootstrap

1 Modélisation d être mauvais payeur

RapidMiner. Data Mining. 1 Introduction. 2 Prise en main. Master Maths Finances 2010/ Présentation. 1.2 Ressources

Une méthode de classification supervisée sans paramètre pour l apprentissage sur les grandes bases de données

Optimisation Discrète

TSTI 2D CH X : Exemples de lois à densité 1

Objectifs. Clustering. Principe. Applications. Applications. Cartes de crédits. Remarques. Biologie, Génomique

Laboratoire 4 Développement d un système intelligent

Identification de nouveaux membres dans des familles d'interleukines

INF6304 Interfaces Intelligentes

Programmation linéaire

Quantification Scalaire et Prédictive

Cours 1. I- Généralités sur R II- Les fonctions de R et autres objets III-Les vecteurs

Entraînement au concours ACM-ICPC

Optimisation, traitement d image et éclipse de Soleil

Apprentissage Automatique

Algorithmique I. Algorithmique I p.1/??

Souad EL Bernoussi. Groupe d Analyse Numérique et Optimisation Rabat http ://

Magasins et entrepôts de données (Datamart, data warehouse) Approche relationnelle pour l'analyse des données en ligne (ROLAP)

T de Student Khi-deux Corrélation

Analyses de Variance à un ou plusieurs facteurs Régressions Analyse de Covariance Modèles Linéaires Généralisés

APPRENDRE LA CHIMIE EN ZEP

La classification automatique de données quantitatives

Cours de méthodes de scoring

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Capacité d un canal Second Théorème de Shannon. Théorie de l information 1/34

L'intelligence d'affaires: la statistique dans nos vies de consommateurs

Cours d Analyse. Fonctions de plusieurs variables

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Vision industrielle et télédétection - Détection d ellipses. Guillaume Martinez 17 décembre 2007

Baccalauréat ES Pondichéry 7 avril 2014 Corrigé

Arbres binaires de décision

Sujet proposé par Yves M. LEROY. Cet examen se compose d un exercice et de deux problèmes. Ces trois parties sont indépendantes.

Initiation à l algorithmique

Présentation du langage et premières fonctions


Evaluation de la Dissémination du Niger. d amélioration des soins obstétricaux et

Formats d images. 1 Introduction

Statistiques Descriptives à une dimension

Une approche non paramétrique Bayesienne pour l estimation de densité conditionnelle sur les rangs

LES GENERATEURS DE NOMBRES ALEATOIRES

Probabilités Loi binomiale Exercices corrigés

1 Définition et Appel d une fonction. V. Phan Luong. Cours 4 : Fonctions

Exploiter les statistiques d utilisation de SQL Server 2008 R2 Reporting Services

Tests du χ 2. on accepte H 0 bonne décision erreur de seconde espèce on rejette H 0 erreur de première espèce bonne décision

Calcul matriciel. Définition 1 Une matrice de format (m,n) est un tableau rectangulaire de mn éléments, rangés en m lignes et n colonnes.

ESSEC. Cours «Management bancaire» Séance 3 Le risque de crédit Le scoring

SUIVI CINETIQUE PAR SPECTROPHOTOMETRIE (CORRECTION)

VIPE CNAM 6 mars Frank Meyer Orange Labs / IMT / UCE / CRM-DA / PROF

1 Recherche en table par balayage

Théorie et Codage de l Information (IF01) exercices Paul Honeine Université de technologie de Troyes France

Le nombre d or et Fibonacci

Introduction au datamining

Simulation de variables aléatoires

Ricco Rakotomalala R.R. Université Lyon 2

Business Intelligence avec Excel, Power BI et Office 365

Hadoop, Spark & Big Data 2.0. Exploiter une grappe de calcul pour des problème des données massives

LES DECIMALES DE π BERNARD EGGER

TABLE DES MATIERES. C Exercices complémentaires 42

Cours 1 : Qu est-ce que la programmation?

Chapitre 7. Récurrences

Tests d indépendance en analyse multivariée et tests de normalité dans les modèles ARMA

Chapitre 3. Mesures stationnaires. et théorèmes de convergence

Comment se servir de cet ouvrage? Chaque chapitre présente une étape de la méthodologie

Relation entre deux variables : estimation de la corrélation linéaire

Principe d un test statistique

Cours de Génie Logiciel

La programmation linéaire : une introduction. Qu est-ce qu un programme linéaire? Terminologie. Écriture mathématique

LES TYPES DE DONNÉES DU LANGAGE PASCAL

NOTE SUR LA MODELISATION DU RISQUE D INFLATION

Estimation et tests statistiques, TD 5. Solutions

Transcription:

Premières classifications : apprentissage et évaluation L objectif de ce TP est double : prise en main de la bibliothèque scikit-learn de Python, dédiée à l apprentissage automatique, sensibilisation à l évaluation des modèles appris en classification supervisée. La documentation en ligne est complète, et sera consultée chaque fois que nécessaire. Le langage de référence de scikit-learn est disponible à l adresse suivante : http://scikit-learn.org/stable/modules/classes.html 1 Jeux de données 1.1 Iris (Fisher, 1936) Iris est un ensemble (jeu) de données introduit en 1936 par Ronald Aylmer Fisher comme un exemple d analyse discriminante. Cet ensemble contient 150 exemples de critères observés sur 3 espèces différentes d iris de Gaspésie (Setosa, Versicolor, Verginica). Chaque exemple est composé de quatre attributs (longueur et largeur des sépales en cm, longueur et largeur des pétales en cm) et d une classe (l espèce). Iris est disponible dans scikit-learn dans le package datasets. Comme tout datasets, il est constitué de deux dictionnaires :.data qui stocke un tableau de dimensions n.m où n est le nombre d instances, et m le nombre d attributs. On dispose ainsi, pour chaque instance, de la valeur de chacun des attributs en l occurrence des réels chez Iris..target qui stocke les classes (étiquettes) de chaque instance (dans le cas supervisé). Les instructions Python suivantes permettent de charger le jeu de données Iris, et d afficher la partie data (description des données en termes d attributs) et la partie target (classe, cible, étiquette). >>> from sklearn import datasets >>> irisdata = datasets.load_iris() >>> print irisdata.data >>> print irisdata.target 1.2 A vous! 1. Comprendre et programmer les quelques lignes précédentes : comment sont réparties les données dans les tableaux? Combien y a t il de données dans chaque classe? Quels sont les attributs et la classe du 32ème élément de l échantillon? 2. Comprendre, commenter et programmer le code source suivant : def plot_2d(data, target, target_names): colors = cycle( rgbcmykw ) # cycle de couleurs target_ids = range(len(target_names)) pl.figure() for i, c, label in zip(target_ids, colors, target_names):

pl.scatter(data[target == i, 0], data[target == i, 1], c=c, label=label) pl.legend() pl.show() S en inspirer pour produire l affichage de la répartition des données selon d autres couples d attributs. 3. Est-ce qu il existe un espace 2D (constitué de deux attributs) dans lequel une droite (parmi d autres) permettrait de séparer les exemples d une classe des exemples des deux autres classes? Si oui, fournir une équation de cette droite. 1.3 Autres jeux de données D autres jeux de données sont directement disponibles dans scikit-learn (notamment boston, diabetes, digits, linnerud, sample images, 20newsgroups) via une fonction de chargement spécifique (load name) ou un processus de rapatriement web facile à mettre en œuvre (fetch). Il existe aussi des générateurs d échantillons, ainsi que la possibilité de récupérer, au bon format d entrée, les jeux de données compilés sur le site mldata.org. 2 Un premier apprentissage de classifieur Sous scikit-learn, dans toute méthode de classification (plus exactement, tout estimateur) représentée par la variable clf, il existe deux fonctions essentielles : 1. La fonction clf.fit(tab data,tab target) qui apprend un modèle à partir des données (ce modèle est stocké en interne dans un enregistrement de la variable clf), 2. La fonction clf.predict(tab data) qui renvoit un tableau qui stocke, pour chaque nouvelle donnée en entrée, la classe prédite par le modèle précédemment appris via l estimateur clf.. 2.1 A vous! L algorithme Naive Bayes Multinomial permet d apprendre un modèle de classification en se basant sur la règle de Bayes, avec hypothèse d indépendance des attributs ; l aspect multinomial indique que cet algorithme fonctionne sur des données décrites par plusieurs attributs à valeurs discrètes 1. Cet algorithme est implanté sous la plupart des logiciels d apprentissage automatique, notamment sous scikit-learn dans le package naive bayes. Nous proposons d utiliser cet algorithme pour les classifications à venir. 1. Comprendre et programmer l exemple ci-dessous : quel est le résultat? >>> from sklearn import naive_bayes >>> nb = naive_bayes.multinomialnb(fit_prior=true) # un algo d apprentissage >>> irisdata = datasets.load_iris() >>> nb.fit(irisdata.data[:-1], irisdata.target[:-1]) >>> p31 = nb.predict(irisdata.data[31]) >>> print p31 >>> plast = nb.predict(irisdata.data[-1]) >>> print plast >>> p = nb.predict(irisdata.data[:]) >>> print p 2. De la même façon : que réalise le programme ci-dessous? Les résultats vous semblent-ils cohérents? Comment interpréter les résultats? Que proposez-vous pour équilibrer l ensemble d apprentissage et l ensemble de test? 1. Dans le cas de scikit-learn, MNB s étend à d autres types de valeurs typiquement réelles traitables via des intervalles : l appartenance d une valzur à l intervalle est de nature discrète.

>>> from sklearn import naive_bayes >>> nb = naive_bayes.multinomialnb(fit_prior=true) >>> nb.fit(irisdata.data[:99], irisdata.target[:99]) >>> nb.predict(irisdata.data[100:149]) 3 Evaluer les performances d un classifieur L objectif ici est de lancer des apprentissages sur le jeu de données Iris, et d évaluer la performance de ces apprentissages en calculant pour chacun : L erreur d apprentissage L estimation de l erreur réelle par séparation en deux parties de l échantillon d apprentissage L estimation de l erreur réelle par validation croisée (cross validation). 3.1 Performances sur l ensemble d apprentissage Erreur apparente erreur empirique erreur d apprentissage. Elle se calcule! Il suffit, pour évaluer la performance d un classifieur sur l ensemble des données qui a servi à sa construction, de lancer la prédiction sur les mêmes données qui ont été fournies à la méthode fit ; puis de comparer le résultat de predict aux target de ces données. Pour cela, plusieurs façons très simples équivalentes existent : 1. Soit P le tableau qui contient les prédictions, et Y le tableau qui contient les cibles (Y = irisdata.target). Le code suivant permet de compter les erreurs et ainsi de calculer l erreur d apprentissage : ea = 0 for i in range(len(irisdata.data)): if (P[i] <> Y[i]): ea = ea+1 print 1.*ea/len(irisData.data) 2. Les opérateurs sur les tableaux et matrices devraient vous permettre d effectuer ce comptage en une seule instruction! Indice : pensez à exploiter le tableau P-Y : que représentent des valeurs non nulles? Comment compter (en une seule instruction) le nombre de valeurs non-nulles? 2 3. La méthode clf.score(x,y) permet de calculer le taux de bonne classification du modèle appris par la méthode clf, sur un ensemble de données stocké dans X et dont les classes sont stockées dans y. Le taux de bonne classification a, appelé en anglais accuracy, est tel que a = 1 e si e est le taux d erreur. Implantez les trois méthodes décrites ci-dessus pour calculer l erreur apparente. Pour chacune, indiquez votre code. Pour chacune, quelle erreur apparente obtenez-vous? (Priez pour que ce soit la même! Sinon, vous vous êtes trompés quelque part...). Sur quelle(s) donnée(s) y a t il une erreur de prédiction? 3.2 Performances en généralisation Erreur réelle erreur en généralisation Elle s estime! 2. cf. package Python numpy : cherchez la doc de la fonction count nonzero

3.2.1 Estimer l erreur réelle par division de l échantillon d apprentissage Difficile de connaître l erreur sur les données à venir, puisqu on ne les connaît pas encore... On suppose l existence d une distribution P (X, y) sur notre échantillon, même si on ne connaît pas cette distribution. Il est alors possible d imaginer que l on peut séparer notre échantillon S en deux : une partie S 1 pour apprendre le modèle, et une autre partie S 2 pour tester le modèle appris. On essaye d avoir S 1 = 2 S 2 = 2 3 S. Attention, on doit avoir S 1 et S 2 disjointes, chacune est supposée suivre la même loi que P! Comme on connaît les étiquettes des exemples de S 2, on peut comparer les prédictions du modèle appris sur S 1, aux cibles (target) réelles de S 2. 1. Créez la fonction split(s) pour séparer en deux un échantillon S de couples (X,y) supposés uniformément répartis, selon le principe évoqué précédemment. On suppose que S est une variable de type datasets. Cette fonction renvoit un tableau à quatre éléments [datas1,targets1,datas2,targets2] où datas1 et datas2 sont des matrices ayant le même nombre de colonnes que S.data, et où targets1 et targets2 sont des vecteurs d étiquettes. Pour cela, on peut utiliser les fonctions du package random de Python, donc la documentation est disponible en ligne : http://docs.python.org/library/random.html. Testez cette fonction sur Iris. 2. Créez la fonction test(s, clf) qui sépare S en deux parties, puis apprend sur la première partie un modèle avec l estimateur clf, et teste ce modèle sur l autre partie, en comptant les erreurs faites sur l échantillon : la proportion d erreurs est renvoyée par la fonction. Testez cette fonction sur iris avec naive Bayes. L erreur estimée est-elle plus petite que l erreur apparente précédemment calculée? Obtient-on toujours la même estimation pour l erreur réelle? 3. Réalisez t fois le test de la fonction test sur le même jeu de données et avec le même algorithme d apprentissage, puis moyennez les erreurs estimées. Quelle erreur moyenne obtenezvous pour t = 10, 50, 100, 200, 500, 1000? Puis, pour chaque t, répétez 20 fois l expérience : pour chaque t, est-ce que l erreur moyenne est stable ou non? Pouvez-vous interpréter ce résultat? 4. Est-ce que l erreur estimée (dans sa version stable), dans le cas d un échantillon de test qui ne prend que le 10ème de l échantillon initial, est la même qu avec la proportion d 1/3? 5. Il existe déjà, sous scikit-learn, une fonction qui réalise le découpage d un échantillon en deux parties disjointes. Il s agit de la fonction train test split du package cross validation. Elle prend en entrée un échantillon de données (descriptions et cibles), et le sépare, selon une proportion en paramètre, en un ensemble d apprentissage et un ensemble test (par défaut : test size=0.25). Elle renvoit ainsi quatre quantités, dans l ordre : une matrice de descriptions des données pour l apprentissage (D train), une matrice de descriptions des données pour le test (D test), le vecteur des classes (cibles) des données d apprentissage (C train), et le vecteur des classes (cibles) des données de test (C test). La documentation en ligne est ici : http://scikit-learn.org/stable/modules/classes.html#module-sklearn.cross validation Testez cette fonction avec plusieurs valeurs pour test size (dont 0.33) pour estimer l erreur réelle de naive Bayes sur les données Iris. Quelles erreurs obtenez vous? 3.2.2 Estimer l erreur réelle par validation croisée Parmi les techniques utilisées pour estimer l erreur réelle d un classifieur, la validation croisée sur n parties (folds) est une des plus courantes, quasi optimale d après de récentes recherches. Son principe est le suivant : Soit un échantillon S. Soit un algorithme d apprentissage A.

Séparer S en n parties disjointes de tailles similaires S i, i = 1..n. Pour i allant de 1 à n : entraîner A sur toutes les S j sauf S i, pour obtenir un classifieur h i (méthode fit). Tester h i sur S i : calculer ainsi E i, l erreur faite par h i sur la partie E i (méthode predict). E i n. Calculer E = i E est ainsi une bonne estimation de l erreur réelle d un classifieur appris avec A sur S. Testez la fonction cross val score du package sklearn.cross validation, pour estimer l erreur réelle par validation croisée 10 folds. Quelle erreur obtenez-vous pour Iris avec naive Bayes? Quid de cette erreur avec 2 folds? 3 folds? 5 ou 8 folds? 4 Rapport 1. Produisez un tableau résumant les différentes erreurs obtenues (calculées et estimées) sur le jeu de données iris, et commentez les écarts. 2. Faites de même avec une autre méthode de classification, que vous verrez au cours suivant : sklearn.tree.decisiontreeclassifier, sans modifier les paramètres par défaut. Est-ce que les erreurs obtenues par la méthode naive Bayes et par la méthode arbre de décision, vous permettent d indiquer si une méthode de classification est meilleure qu une autre? 3. Avez-vous une autre idée pour estimer l erreur réelle d un classifieur?