sujet

publicité
Cours INT-­22 « Introduction à l’Apprentissage Artificiel » Apprentissage supervisé par inférence d’arbres de décisions Ce TP a pour objectif d’expérimenter l’apprentissage supervisé en utilisant des méthodes d’induction d’arbres de décision. Pour ce faire, la « boîte à outils de fouille de données » Orange sera utilisée (voir http://orange.biolab.si/). 1. Créez un répertoire pour les TPs du cours INT-­‐22. Placez vous dans ce répertoire. 2. Allez chercher les fichiers de données disponibles dans le répertoire http://www.lri.fr/~antoine/Courses/ENSTA/TP-­‐AD-­‐ensta.tar et copiez les dans votre répertoire courant. 3. Ouvrez le fichier ‘spirale.tab’ à l’aide d’un éditeur de texte et observez la structure d’un fichier de données en format .tab adapté au traitement par la boîte à outils Orange. Tous les fichiers de données que vous voudrez traiter avec Orange devront suivre ce format. 1. Prise en main de ‘Orange’ Orange est un ensemble d’outils de fouille de données et d’Apprentissage Artificiel écris dans le langage Python et qui utilisent un noyau C pour la rapidité d’exécution. C’est un logiciel facile à prendre en main car il repose sur de la « programmation graphique » dans laquelle on dispose des « widget » correspondants à des traitements particuliers dans une fenêtre graphique. (voir figure 1). Figure 1 : Schéma d'application et d'évaluation de la méthode KNN. Les données sont acquises grâce au widget « File ». Elles peuvent être visualisées avec le widget « Scatterplot ». Elles sont traitées par une méthode de classification supervisée de plus proche voisins « k-­‐Nearest Neighbours ». L’évaluation des performances en généralisation se fait grâce au widget « Test Learners » et les résultats sont ici analysables à l’aide d’une Matrice de Confusion et d’une Courbe ROC. On lance Orange par la commande : orange-­‐canvas 2. Expériences sur des données artificielles en 2D On commence par traiter le jeu de données ‘2classes_lin.tab’. Question 1 : Combien d’attributs décrivent les exemples ? Sont-­‐ils à valeurs nominales, discrètes ou continues ? Question 2 : Quelles sont les valeurs possibles pour la variable de sortie ? Utilisez des widgets pour charger la base de données ‘2classes_lin.tab’, pour obtenir des informations sur les données et pour visualiser les exemples sur un graphique. Question 3 : Quel est selon vous le concept cible ? Nous allons étudier comment la méthode d’apprentissage par arbre de décision permet d’apprendre ce concept cible. Placez le widget ‘Classification Tree’ dans la fenêtre Orange et reliez le à ‘File’. Placez ensuite en aval les widgets ‘Classification Tree Viewer’ et, en parallèle, ‘Classification Tree Graph’. Ces widgets permettent de visualiser l’arbre appris. Question 4 : Combien de nœuds et de feuilles contient l’arbre ? Quelle est sa profondeur ? Combien y-­‐
a-­‐t-­‐il d’exemples dans chaque feuille ? On utilisera le paramétrage suivant dans ‘Classification Tree’ : •
•
•
•
Attribute sélection criterion = Infomation Gain ; Binarization = No binarization ; Pre-­‐pruning = Min instances in leaves = 2 ; Stop splitting nodes with a majority classe of 95% ; Post-­‐Pruning = Recursively merge leaves with same majority class. Question 5 : Dessinez sur le graphe des exemples (obtenu grâce au widget ‘Scatterplot’), les frontières de décision de l’arbre obtenu. Modifiez les paramètres et observez les conséquences de ces changements. Nous allons maintenant mesurer la performance du concept appris par la méthode des arbres de décision. Pour cela, nous utiliserons le widget ‘Test Learners’ (dans l’onglet ‘Evaluate’). Dans ce premier TP, nous nous concentrerons sur la précision en prédiction (CA : « Classification Accuracy »). Question 6 : Comparez les taux de bonne prédiction en utilisant successivement : •
•
•
La précision de resubstitution (‘Test on train data’) La précision en ‘random sampling’ La précision en validation croisée (à 10 plis) Que remarquez-­‐vous ? Est-­‐ce conforme à nos attentes ? Refaites les mêmes mesures en modifiant la profondeur de l’arbre appris : de 1 à 5. Que peut-­‐on en conclure sur la difficulté du concept cible ? 3. Expériences sur des données artificielles en 2D : spirale.tab Refaire les mêmes traitements en utilisant le fichier ‘spirale.tab’. 4. Expériences sur les données artificielles : heart_disease.tab Utilisez des widgets pour charger la base de données ‘heart_disease.tab’, pour obtenir des informations sur les données et pour visualiser les exemples sur un graphique. Question 1 : Combien d’attributs décrivent les exemples ? Sont-­‐ils à valeurs nominales, discrètes ou continues ? 2 Question 2 : Quelles sont les valeurs possibles pour la variable de sortie ? Question 3 : Déterminez les valeurs des paramètres de l’arbre de décision (en particulier la profondeur) qui maximisent le taux de prédiction. Distinguez bien le taux de prédiction en resubstitution, en ‘random-­‐sampling’ et en validation croisée. 5. Mise en œuvre de prétraitements sur les données On va tester l’effet de la discrétisation des variables à l’aide du widget ‘Discretize’ (voir figure 2 pour le schéma des widgets). Figure 2 : Schéma général montrant en particulier l’utilisation des étapes de prétraitements. Question 1 : Essayez plusieurs modes de discrétisation et observez les résultats en terme de performance et en terme d’arbres obtenus. On testera ensuite l’effet de la sélection d’attributs grâce au widget ‘Select Attributes’. Question 2 : Sélectionnez plusieurs sous-­‐ensembles des attributs et observez les effets sur la performance et sur les arbres obtenus. 6. Expériences contrôlées sur le taux de bruit et les valeurs manquantes Nous allons maintenant tester les capacités d’apprentissage d’arbres de décisions en fonction de plusieurs facteurs : la complexité du concept cible caché, du nombre d’exemples disponibles, du taux de bruit et du taux de valeurs manquantes. 3 Afin d’évaluer la capacité d’apprentissage par arbres de décision, nous allons générer des jeux de données décrits par un nombre N d’attributs et étiquetés selon un concept cible que nous définirons en terme d’un arbre de décision. De cette manière, nous pourrons voir si l’arbre appris correspond à l’arbre cible que nous avons défini. Rq : le programme permet d’engendrer des arbres avec un facteur de branchement quelconque (voir le paramètre nb_valeurs), mais pour des raisons de simplicité, nous nous limiterons ici à des arbres binaires (deux branches / nœud) et à deux classes : ‘+’ et ‘-­‐‘. La fonction creation_base(Base_exemples, nb_attributs, nb_exemples, ArbreCible) du module tp_ad.py permet de créer une base d’exemples. E.g. création_base (‘bd_exemples_10_100.tab’, 10, 100, ['A1', [0, '+'], [1, ['A3', [0,'-­‐'], [1,'+']]]]) crée une base de 100 exemples décrits sur 10 attributs et étiquetés selon l’arbre cible ['A1', [0, '+'], [1, ['A3', [0,'-­‐'], [1,'+']]]]. Question 1 : créez des bases d’exemples avec des nombres variables d’attributs (≥ 6) et des nombres variables d’exemples étiquetées selon l’arbre : ['A1', •
•
[0, [1, ['A6', ['A3', [0, '+'], [1, [0, '-­‐'], [1, ['A2', [0, ['A5', [0, '+'], [1, '-­‐']]], [1, '+']]]]], ['A2', [0, [1, '-­‐']]]]]] ['A4', [0, '+'], [1, '-­‐']]], Dessinez l’arbre correspondant. Pour quelles valeurs des nombres d’attributs et nombres d’exemples peut-­‐on retrouver une bonne approximation de l’arbre cible : les bons attributs, éventuellement bien placés dans l’arbre appris ? Nous allons maintenant étudier l’effet du taux de bruit et du taux de valeurs manquantes sur l’apprentissage. Pour cela, après avoir créé une base d’exemples selon la méthode précédente, vous utiliserez la fonction bruite_exemples (BaseSource, BaseCible, Attribut, Pourcent, manquantes) pour bruiter ces données. •
•
•
Le paramètre Attribut permet de spécifier sur quel attribut on souhaite faire porter le bruitage (e.g. ‘A1’). Si Attribut vaut False, tous les attributs seront bruités. Le paramètre Pourcent spécifie le pourcentage de valeurs bruitées. (E.g. 30 pour 30%) Le paramètre manquantes détermine le type de bruit subit par la BaseSource. Si manquantes vaut False, alors il s’agit d’un bruit de description, si manquantes vaut True, alors il s’agit d’un bruitage par valeurs manquantes. Ainsi, bruite_exemples ('tree_10_100.tab', 'tree_bruit_10_100.tab', False, 70, False) crée la base d’exemples tree_bruit_10_100.tab à partir de la base tree_10_100.tab en bruitant tous les attributs avec un taux de 70% (70% des valeurs sont modifiées). Vous pourrez examiner le code de la fonction avec profit. Question 2 : Bruitez des bases sources sur un seul attribut selon des taux variables et mesurez l’effet sur l’apprentissage. Question 3 : idem, mais en bruitant tous les attributs. Question 4 : Refaire les mêmes expériences en imposant des valeurs manquantes (sur un attribut et sur tous les attributs). 4 
Téléchargement