Vous êtes sur la page 1sur 10

Classification via les Arbres de Décision dans WEKA

Le guide suivant est basé sur la version 3.4.1 de WEKA. Des ressources complémentaires sur
WEKA, incluant des jeux de données d’exemples, peuvent être trouvées sur le site officiel
WEKA Web site.

Cet exemple illustre l’utilisation du classificateur C4.5 (J48) dans WEKA. Le jeu de données
exemple utilisé pour ce TP, à moins qu’il ne soit explicitement indiqué d’en utiliser un autre,
correspond à des données bancaires disponible au format CSV (bank-data.csv). Ce document
fait l’hypothèse que les prétraitements adéquats ont été appliqués aux données. Dans ce cas, le
champ ID a été retiré. Puisque l’algorithme C4.5 peu gérer des attributs numériques, il n’y a
pas besoin de discrétiser (ou quantifier) aucun des attributs. Pour le besoin de ce TP
cependant, l’attribut "Children" a été converti en attribut par catégorie avec la valeur "YES"
ou "NO".

Dans cet exemple, nous utiliserons une version modifiée du jeu de données bancaires pour
classifier de nouvelles instances en utilisant l’algorithme C4.5 (notez que l’algorithme C4.5
est implémenté dans WEKA par la classe de classifieur : weka.classifiers.trees.J48). La
version modifiée (et plus petite) du jeu de données bancaires peut être trouvée sur le moodle
du cours dans le fichier "bank.arff" et les nouvelles instances non-classifiées sont dans le
fichier "bank-new.arff".

Nous commençons par charger les données dans WEKA, comme vu sur la Figure 20 :
Ensuite, nous sélectionnons l’onglet "Classify" et nous cliquons sur le bouton "Choose" pour
sélectionner le classifieur J48, comme indiqué sur les Figures 21-a et 21-b. Remarquez que
J48 (l’implémentation de l’algorithme C4.5) ne requiert pas de discrétisation (ou
quantification) des attributs numériques, au contraire de l’algorithme ID3 dont l’algorithme
C4.5 est une version évoluée.

Maintenant, nous pouvons régler plusieurs paramètres. Ceux-ci peuvent être spécifiés en
cliquant dans la boîte de texte sur la droite du bouton "Choose", comme indiqué sur la Figure
22. Dans cet exemple, nous choisissons les valeurs par défaut. La version par défaut de
l’algorithme effectue un élagage (en utilisant l’accroissement des sous-arbres), mais
n’effectue pas l’élagage sur l’erreur. Les paramètres sélectionnés sont illustrés dans la Figure
22.

Sous les "Test options" dans le panneau central, on sélectionne 10-fold cross-validation
comme approche d’évaluation. En effet, puisque nous n’avons pas de jeu de données
d’évaluation séparé, cette option est nécessaire pour obtenir une idée raisonnable de la
précision du modèle généré. Nous cliquons donc maintenant sur "Start" pour générer le
modèle. La version ASCII des arbres de décision ainsi que les statistiques d’évaluation
apparaitront dans le huitième panneau quand la construction du modèles sera complète (voir
la Figure 23).

Nous pouvons voir cette information dans une fenêtre séparée par un clique droit sur le
dernier jeu de données (dans le panneau "Result list" sur la gauche) et en sélectionnant "View
in separate window" du menu pop-up. Ces étapes et la fenêtre résultante contenant les
résultats de la classification sont illustrés dans les Figures 24-a et 24-b.

Remarquons que la précision de la classification du modèle dans l’illustration est seulement


d’environ 69%. Cela pourrait indiquer que nous pourrions avoir besoin de travailler plus sur
les données (soit en les prétraitant ou en sélectionnant les paramètres corrects pour la
classification), avant de construire un autre modèle. Dans cet exemple, cependant, nous
continuerons avec ce modèle malgré son imprécision.
WEKA nous fournit aussi une visualisation graphique de l’arbre de décision de classification.
Cela peut être obtenu en cliquant avec le bouton droit sur le jeu des derniers résultats (comme
précédemment) et en sélectionnant "Visualisation de l’arbre" dans le menu pop-up. L’arbre
pour cet exemple est décrit dans la Figure 25. Remarquons qu’en retaillant la fenêtre et en
sélectionnant plusieurs items du menu depuis la vue de l’arbre (en utilisant le bouton droit),
nous pouvons ajuster la vue de l’arbre pour le rendre plus lisible.

Nous utiliserons maintenant notre modèle pour classifier les nouvelles instances. Une portion
du fichier ARFF des nouvelles instances est illustrée dans la Figure 26. Remarquons que la
section attribut est identique à celle de l’ensemble d’apprentissage (les données bancaires que
nous avons utilisées pour construire notre modèle). Cependant, dans la section données, la
valeur de l’attribut "pep" est "?" (ou inconnue).
Dans le panneau principal, sous les "Test options" on clique sur le bouton radio "Supplied test
set", et on clique alors sur le bouton "Set...". Une fenêtre s’ouvrira pour permettre d’ouvrir le
fichier contenant les instances de test, comme sur les Figures 27-a et 27-b.

Dans ce cas, nous ouvrons le fichier "bank-new.arff" et après être revenu à la fenêtre
principale, nous cliquons sur le bouton "start". Ceci, une fois encore, génère les modèles à
partir de nos données d’entrainement, mais cette fois WEKA applique le modèle appris aux
nouvelles instances non encore classifiées dans le fichier "bank-new.arff" afin de prédire la
valeur de l’attribut "pep". Le résultat est présenté dans la Figure 28. Remarquons que le
résumé des résultats dans le panneau de droite ne montre aucune statistique. Ceci est dû au
fait que pour nos instances de test la valeur de l’attribut de classe ("pep") a été laissé en "?", et
donc WEKA ne connait pas la valeur réelle à laquelle devrait être comparée les valeurs
prédites pour les nouvelles instances.
Bien sûr, dans cet exemple nous sommes intéressés par comprendre comment notre modèle
classifie les nouvelles instances. Pour ce faire, nous devons créer un fichier contenant toutes
les nouvelles instances avec leur valeur de classe prédite résultant de l’application de notre
modèle. C’est beaucoup plus simple en utilisant la version de WEKA de l’application du
classifieur en ligne de commande. Cependant, il est aussi possible de le faire dans la version
GUI en utilisant une approche "indirecte" :

Tout d’abord, cliquez avec le bouton droit sur le résultat le plus récent dans le panneau sur la
gauche "Result list". Dans la fenêtre qui s’ouvre, sélectionnez l’item du menu "Visualize
classifier errors". Une fenêtre séparée contenant un graphe à 2 dimensions apparait. Ces
étapes et la fenêtre résultat sont montrées en Figures 28 et 29.

Pour l’instant, nous ne nous intéressons pas à ce que ce graphique représente. Nous voulons
plutôt "sauvegarder" les résultats de classification qui ont permis de générer ce graphique.
Dans la nouvelle fenêtre, on clique sur le bouton "Save" et nous sauvegardons les résultats
dans le fichier : "bank-predicted.arff", comme montré sur la Figure 30.
Ce fichier contient une copie des nouvelles instances avec une colonne additionnelle pour la
valeur prédite "pep". La partie supérieure de ce fichier est illustré en Figure 31.

Remarquez que 2 attributs ont été ajoutés aux données des nouvelles instances :
"Instance_number" et "predictedpep". Ceux-ci correspondent à de nouvelles colonnes dans
cette portion de données. La valeur "predictedpep" pour chaque nouvelle instance pour
chaque nouvelle instance est la dernière valeur avant le "?" qui est la valeur courante de la
valeur de classe "pep". Par exemple, la valeur prédite de l’attribut "pep" pour l’instance 0 est
"YES" d’après notre modèle, tandis que la valeur de classe prédite pour l’instance 4 est "NO".

En utilisant la ligne de commande (Recommandé)

Si la version par Interface Graphique GUI de WEKA est efficace pour visualiser et fixer les
paramètres, quand on passe à la phase de construction d’un modèle de classification (ou de
prédiction) et que l’on souhaite l’appliquer à de nouvelles instances de données, l’approche la
plus directe et la plus flexible est d’utiliser la ligne de commande. En fait, vous pouvez
utiliser l’interface graphique pour créer la liste des paramètres (par exemple dans le cas des
algorithmes de la classe J48) et ensuite utiliser ces paramètres dans la ligne de commande.

Dans l’interface principale de WEKA, cliquez sur le bouton "Simple CLI" pour lancer
l’interface vers la ligne de commande. La commande principale pour générer un modèle de
classification comme nous l’avons fait ci-dessus est :

java weka.classifiers.trees.J48 -C 0.25 -M 2 -t directory-path\bank.arff -d


directory-path \bank.model
Les options -C 0.25 et -M 2 dans la commande précédente sont les mêmes options que celles
que nous avions sélectionnées pour le classifieur J48 dans l’exemple par interface graphique
précédent GUI (voir Figure 22). L’option -t dans la commande spécifie la prochaine chaîne
de caractères correspond au chemin complet vers le répertoire contenant le fichier
d’apprentissage (dans ce cas "bank.arff"). Dans la commande ci-dessus directory-path devrait
être remplacé avec le chemin complet vers ce répertoire. Enfin, l’option -d spécifie le nom (et
la localisation) où le modèle sera sauvegardé. Après l’exécution de cette commande dans
l’interface "Simple CLI", vous devriez voir l’arbre et les stats suivantes à propos du modèle
dans la fenêtre du haut (voir Figure 32).
Sur la base de la commande précédente, notre modèle de classification a été stocké dans le
fichier "bank.model" et placé dans le répertoire que nous avions spécifié. Nous pouvons
maintenant appliquer ce modèle aux nouvelles instances. L’avantage de construire un modèle
et de le stocker est qu’il peut donc être appliqué n’importe quand sur n’importe quel jeu de
données non-classées. La commande pour le faire est :

java weka.classifiers.trees.J48 -p 9 -l directory-path\bank.model -T


directory-path \bank-new.arff

Dans la commande ci-dessus, l’option -p 9 indique que nous voulons prédire une valeur
l’attribut numéro 9 (qui est "pep"). L’option -l spécifies le chemin du répertoire et le nom du
fichier contenant le modèle (c’est ce qui avait été créé à l’étape précédente). Enfin, l’option -T
spécifie le nom (et le chemin) des données de test. Dans notre exemple, les données de test
correspondent à de nouvelles instances "bank-new.arff").

Cette commande produit une sortie en 4 colonnes similaires à ce qui suit :

0 YES 0.75 ?
1 NO 0.7272727272727273 ?
2 YES 0.95 ?
3 YES 0.8813559322033898 ?
4 NO 0.8421052631578947 ?

La première colonne est est le nombre d’instance assigné aux nouvelles instances "bank-
new.arff" par WEKA. La 2ème colonne est la valeur prédite pour l’attribut "pep" pour la
nouvelle instance. La 3ème colonne correspond à la confiance (précision de prédiction) pour
cette instance. Enfin, la 4ème colonne correspond à la valeur actuelle de "pep" dans la valeur de
test (dans ce cas, nous n’avions pas de valeur pour "pep" dans "bank-new.arff", donc cette
valeur est "?"). Par exemple, dans la sortie précédente, la valeur prédite pour "pep" de
l’instance 2 est "YES" avec une confiance de 95%. Une partie des résultats finaux est décrite
dans la Figure 33.
La sortie ci-dessus est préférable à la sortie venant de l’interface graphique de WEKA. Tout
d’abord, c’est une approche plus directe qui nous autorise à sauvegarder les modèles de
classification. Ce modèle peut être appliqué à toute nouvelle instance plus tard sans avoir à
regénérer le modèle. Deuxièmement (et c’est encore plus important), dans ce cas nous avons
les valeurs indépendantes de confiance (précision) pour chaque nouvelle instance. Cela
signifie que nous pouvons nous concentrer seulement sur les données pour lesquelles nous
avons une prédiction avec une confiance élevée. Par exemple, dans la sortie ci-dessus, nous
pourrions filtrer toute instance dont la valeur prédite a une précision de moins de 85%.

Vous aimerez peut-être aussi