Cours Apprentissage Artificielle
Année 2011

TP 3 : Utilisation de WEKA

 

 

Ce TP est dédié à l’utilisation de l’environnement open source WEKA

 

WEKA (Waikato Environment for Knowledge Analysis) propose un ensemble d’outils permettant de manipuler et d’analyser des bases de données. Il  implémente la plupart des algorithmes d’apprentissage supervisé et non supervisé (arbres de décision, réseaux de neurones, etc.).

 

Cet environnement open source est implémenté en java. Il est disponible à l’adresse suivante : http://www.cs.waikato.ac.nz/ml/weka/

 

WEKA se compose principalement :

      de classes Java permettant de charger et de manipuler les données.

      de classes pour les principaux algorithmes de classification supervisée et non supervisée.

      d’outils de sélection d’attributs et de statistiques sur ces attributs.

      de classes permettant de visualiser les résultats.

 

Cet environnement peut être utilisé de 3 manières:

1.    via l’interface graphique, pour charger un fichier de données, lui appliquer un algorithme, vérifier son efficacité.

2.    invoquer un algorithme par ligne de commande.

3.    utiliser les classes définies dans ses propres programmes pour créer d’autres méthodes, implémenter d’autres algorithmes, comparer ou combiner plusieurs méthodes.

 

Dans le cadre de ce TP, nous étudierons les possibilités 1 et 3.

 

I.    Fichier arff

 

WEKA utilise (entre autres) le format de fichier arff pour enregistrer les données.  Un fichier arff est composé d’une liste d’exemples définis par leurs valeurs d’attributs.

 

Ouvrez le fichier iris.arff (qui se trouve dans le répertoire data d’installation de WEKA) avec un éditeur de texte (Wordpad par exemple).

 

Remarque préliminaire : le caractère « % » marque les lignes de commentaires.

 

Un fichier arff comprend toujours trois types d’informations : un nom pour la base de données, des attributs et des données.

 

La chaîne de caractères @RELATION permet de donner un nom à la base de données. Par exemple, dans le cas du fichier iris.arff, le nom donné est iris.

@RELATION iris

 

La chaîne de caractères @ATTRIBUTE permet de définir un attribut. Un attribut peut être de 4 types :

    réel (NUMERIC ou REAL)

    Nominal ({valeurs-possible}) : par exemple :

@ATTRIBUTE class       {Iris-setosa,Iris-versicolor,Iris-virginica}  signifie que l’attribut class peut avoir comme valeur soit Iris-setosa, soit Iris-versicolor ou soit Iris-virginica.

    Chaîne de caractère (STRING)

    Date (date [<date-format>])

 

A noter que WEKA propose un éditeur de fichier arff (toolsarffViewer) permettant de visualiser les fichiers arff sous la forme d’un tableau, et éventuellement de les modifier.

 

II. Utilisation de l’interface graphique

1.   Analyse des données

Dans un premier temps, vous allez vous familiariser avec l'utilisation de WEKA en utilisant l’interface graphique.

 

·      Lancez WEKA. Dans la fenêtre « Weka GUI chooser » qui s’est ouverte, cliquez sur le bouton « Explorer ». Une fenêtre « Weka Explorer » doit s’ouvrir. C’est elle qui nous servira d’interface principale.

·      Cliquez sur le bouton « Open file… ». Choisissez le fichier de données, ici, iris.arff.

Un certain nombre d’informations vont apparaître dans la fenêtre « Weka Explorer ».

Q1. Combien y a-t-il d’instances dans cette base de données ?

Q2. Quels sont les noms des attributs ?

Q3. À quoi correspond la zone « Selected attribute » à droite juste sous le bouton « Apply » ?

Q4. Vérifiez ce qui se produit lorsque vous cliquez sur les différents attributs. À quoi correspondent les valeurs « Name », « Type », « Missing », « Distinct » et « Unique » ?

Q5. A quoi correspond le graphique en bas à droite ? Que fait le bouton « Vizualize all » ?

2.   Visualisation des données

La visualisation de données peut permettre de se faire une idée de l’organisation de celles-ci.

 

·      Cliquez sur l’onglet « Visualize ». Vous voyez un tableau de graphiques étiquetés par les attributs des données. Chaque graphique correspond à un graphique où chaque point représente une instance colorée en fonction de sa classe. La position du point est donnée en abscisse par l’attribut situé en haut du tableau et en ordonnée par l’attribut situé à gauche du tableau.

 

Q6. Vérifiez que la diagonale du tableau ne contient des graphiques ou toutes les instances sont sur la droite x=y.

Q7. Pour le jeu de données iris.arff, pouvez vous dire s’il existe un attribut unique avec lequel on va pouvoir bien classer ? Si oui lequel ?

Q8. Existe-t-il deux attributs avec lesquels le classement peut être très bon ? Si oui lesquels ?

·      En cliquant sur une croix dans une fenêtre de visualisation, l’ensemble des instances correspondant à cette croix sont décrits de façon plus précise dans une autre fenêtre. En particulier cette fenêtre permet d’accéder au numéro des instances cliquées.

Q9. Qu’elle est l’utilité du Jitter ?

Q10. Expliquez comment on peut simuler un graphique tridimensionnel en changeant la coloration des instances.

3.   Apprentissage supervisé

 

Nous allons maintenant tester une méthode d’apprentissage sur ces données.

 

·      Choisissez l’onglet « Classify » dans la barre du haut.

·      Choisissez une méthode d’apprentissage grâce au bouton « Choose ». Par exemple, sélectionner le classifieur « Classifiers→Trees→J48 » afin de tester la méthode d’induction d’arbres de décision C4.5.

o   En haut à gauche, dans la partie « Test options », vous pouvez sélectionner le type de validation souhaité. Par exemple, l’option « Use training set » permet de calculer l’erreur empirique du classifieur sur la base d’apprentissage.

o   Cliquez ensuite sur le bouton « Start » pour généré le modèle prédictif (ici l’arbre de décision).

o   L’arbre construit (en mode texte + taille de l’arbre et nombre de feuilles) ainsi que les résultats obtenus (taux d’erreur, matrice de confusion) s’affichent dans la fenêtre de droite.

o   Il est possible de faire afficher l’arbre obtenu en cliquant avec le bouton droit de la souris sur la ligne « heure – trees.J48 » (en bas à droite) puis en choisissant « Visualize tree ». Dans la fenêtre de visualisation de l’arbre, des options sont disponibles afin de faciliter cette visualisation (« feet to screen », « auto scale », etc.).

 

 

 

Utilisation du classifieur « J48 » sur la base « credit-g.arff »

Q11. Quelle est l’erreur obtenue sur la base d’apprentissage ? Quelle est la taille de l’arbre ?

Q12. Dans les options du classifieur J48, passez la valeur du paramètre « unprunned » à « true » (on supprime le post-élagage de l’arbre). Quel est le taux d’erreurs obtenu sur la base d’apprentissage ? Quelle est la taille de l’arbre ?

Q13. Tester de nouveau ce classifieur avec et sans élagage, en prenant cette fois comme « Test options », « Percentage split » à 66% (on apprend sur 66% des exemples et on évalue le résultat sur les exemples restants). Quels sont les taux d’erreurs obtenus avec et sans élagage ? Expliquez pourquoi on obtient ces résultats.

 

Utilisation d’un filtrage des attributs. Ouvrez de nouveau la base « credit-g.arff »

Q14. Les exemples de cette base sont décrits par combien d’attributs ?

Q15. Appliquer sur cette base un filtrage des attributs (dans la partie « filter » de l’onglet « Preprocess », appuyez sur le bouton « choose », puis sélectionnez « filters→supervised→attribute→AttributeSelection » puis appliquer sur « Apply »). Combien reste-t-il d’attributs ?

Q16. Tester de nouveau le classifieur J48 (avec élagage) en prenant comme « Test options », « Percentage split » à 66%. Quel est le taux d’erreurs obtenu ? Quelle est la taille de l’arbre ?

Q17. Comparez ces résultats aux résultats obtenus sans filtrage. Expliquez.       

 

Utilisation du boosting

·      Ouvrez de nouveau la base credit-g.arff.

·      Testez le classifieur « ClassifiersTreesDecision Stump » (classifieur faible basé, pour la classification, sur le calcul de l’entropie), en prenant comme « Test options », « Percentage split » à 66%.

 

Q18. Quelles est le taux d’erreurs obtenu ?

 

 

·      Testez maintenant l’algorithme Adaboost « ClassifiersmetaAdaboostM1 ». Par défaut, cet algorithme de boosting utilise le classifieur Decision Stump comme classifieur de base.

 

Q19. Quel est le taux d’erreurs obtenu ? Expliquez.

 

Q20. Refaites le même test (avec et sans boosting) avec comme classifieur de base l’algorithme des k plus proches voisins : « Classifieurs→lazy→IB1 » (k plus proches voisins avec k = 1). Qu’observez-vous ? Expliquez.

4.   Apprentissage non supervisée

                                              i.   Clustering

·     Ouvrez la base iris.arff.

·     Allez dans l’onglet « cluster »

·     Choisissez comme algorithme de clustering, l’algorithme « SimpleKMeans ». Dans les options de l’algorithme, choisissez comme valeur pour le paramètre « numClusters » (nombre de cluster) 3.

·     Dans la partie haut gauche « cluster mode », choisissez l’option « Classes to clusters evaluation » qui permet de tester la qualité des groupes formés par rapport à la classe donnée par les experts.

·     Appuyez ensuite sur le bouton « start ».

·     Pour visualiser les groupes formés, cliquez avec le bouton droit de la souris sur la ligne « heure – SimpleKMeans » (en bas à droite) puis sélectionnez « Visualize clusters assignments ».

 

Q21. Faîtes le même test avec l’algorithme « EM ». Les résultats sont-ils meilleurs ? Pourquoi ?

 

                                            ii.   Règles d’association

·     Ouvrez la base bank-data.arff.

·     Allez dans l’onglet « Associate ».

·     Appuyer sur Start pour lancer l’algorithme Apriori (algorithme par défaut pour les règles d’association).

 

Q22. Quelles sont les trois règles les plus fiables générées par l’algorithme et quel est le taux de confiance de chacune de ces règles ?

 

III.               Utilisation de WEKA en tant que lib java

 

L’objectif de cette partie est de vous familiarisez à l’utilisation de WEKA en tant que librairie java.

 

Remarque préliminaire : Une javadoc est fournie avec WEKA (dans le dossier « doc »).

 

·      Commencez par créer un nouveau projet java sous eclipse.

·      Ajoutez dans le « Java Build Path → librairie » du projet le fichier « weka.jar » (il également est possible d’attacher le code source à ce jar).

·      Créez un nouveau package

·      Créez une nouvelle classe dans ce package avec une méthode « main » (lors de la création de la classe cocher la case public « static void main(String[] args) ».

 

Chargement d’un fichier arff

//Lecture du fichier d'apprentissage

      FileReader reader = new FileReader(fichierEntrainement);

 

//création des exemples d'apprentissage à partir du fichier

      Instances instances = new Instances(reader);

 

//Fermeture du flux de lecture

reader.close();

 

      //choix de la classe à apprendre

      instances.setClassIndex(instances.numAttributes() - 1);

     

Instanciation d’un classifieur de type C4.5 (appelé ici J48) et apprentissage

//on instancie les paramètre de l'algorithme d'apprentissage

J48 classifieur = new J48();

 

Evaluation par validation croisée (avec k = 10)

      //Evaluation par validation croisée

      Evaluation eval = new Evaluation(instances);

      eval.crossValidateModel(classifieur, instances, 10, new Random());

      System.out.println("Taux d’erreurs par VC :" + eval.errorRate());

 

 

Q23. Effectuer le même test avec un réseau de neurone (« MultilayerPerceptron »). Que remarque-t-on ?

 

Q24. Dans le cadre de la base credit-g.arff, nous souhaitons apprendre un modèle de type arbre de décision (avec l’algorithme c4.5) qui privilégie le classement des exemples en « bad » plutôt qu’en « good ». Comment faire ?

Aide : on peut utiliser pour cela le meta classifieur « Classifiersmeta CostSensitiveClassifier» qui permet de donner un poids plus important à certaines classes.