Vous êtes sur la page 1sur 6

Machine Learning

Faculté des sciences de Monastir

TP 5: Implémentation des arbres de décision

L'apprentissage par arbre de décision consiste à construire un arbre depuis un ensemble d'apprentissage
étiqueté. Chaque nœud interne décrit un test sur une variable d'apprentissage, chaque branche représente un
résultat du test, et chaque feuille contient la valeur de la variable de sortie.
Les algorithmes d'apprentissage par arbres de décision sont construits en divisant l'arbre du nœud racine vers
les feuilles en choisissant à chaque étape une variable d'entrée qui réalise le meilleur partage de l'ensemble
des observations sur le nœud courant. Pour choisir la variable de partage sur un nœud qu'on appelle variable
segmentation, l'algorithme teste les différentes variables d'entrée possibles et sélectionnent celle qui
maximise un critère donné.
Il existe un grand nombre de critères de ce type, les plus utilisés sont l’entropie de Shannon, l'indice de
diversité de Gini et leurs variantes.

1. Préparation des données


Nous allons d'abord importer le jeu de données iris à partir de sklearn.datasets. Ce jeu de données
relativement connu dans le monde du Machine Learning et il est exclusivement utilisé par des personnes
désirant s'initier dans ce domaine.

En 1936, Edgar Anderson a collecté des données sur 3 espèces d'iris: "iris setosa", "iris virginica" et "iris
versicolor"

Iris setosa Iris virginica Iris versicolor

Pour chaque iris étudié, Anderson a mesuré (en cm) :


∙ la largeur des sépales
∙ la longueur des sépales
∙ la largeur des pétales
∙ la longueur des pétales
Pour chaque iris mesuré, Anderson a aussi noté l'espèce ("Iris setosa", "Iris virginica" ou "Iris versicolor").
En résumé, vous trouverez dans le fichier iris:
∙ la longueur des pétales
∙ la largeur des pétales
∙ l'espèce de l'iris (au lieu d'utiliser les noms des espèces, on utilisera des chiffres : 0 pour "iris setosa", 1
pour "iris virginica" et 2 pour "iris versicolor")
1/6
Machine Learning
Faculté des sciences de Monastir

Par souci simplification, dans ce TP nous allons nous intéresser uniquement à la largeur et à la longueur des
pétales.

Nous utilisons ensuite la bibliothèque matplotlib qui permet de tracer des graphiques très facilement.
"plt.scatter" permet de tracer des points. Le premier "plt.scatter" permet de tracer les points
correspondant à l'espèce "Iris setosa", ces points seront vert (color='g'), le deuxième "plt.scatter" permet
de tracer les points correspondant à l'espèce "Iris virginica", ces points seront rouge (color='r'), enfin le
troisième "plt.scatter" permet de tracer les points correspondant à l'espèce "Iris versicolor", ces points seront
bleu (color='b'). Nous aurons en abscisse la longueur du pétale et en ordonnée la largeur du pétale.

Vous devriez normalement obtenir ce graphique :


Nous obtenons des "nuages" de points, on remarque ces points sont regroupés par espèces d'iris sauf que
pour "Iris virginica" et "Iris versicolor", les points ont un peu tendance à se chevaucher.

Si on survol nos données, on remarque bien qu'il n'y a pas de données manquantes et il n'y a pas de problème
non plus le problème de variables catégoriques. Donc nous allons passez directement à la phase de division
des données en une partie d'entraînement et une partie de test. Puisqu'on a assez de données, nous allons
prendre 20% de ces données pour le test (test_size = 0.20) et 80% pour la phase d'entraînement.

2/6
Machine Learning
Faculté des sciences de Monastir

2. Construction de l'algorithme d'arbre de décision

Maintenant que nos données sont prêtes on va pouvoir appliquer l'algorithme d'arbre de décision sur notre
jeu d'entraînement.
La toute première étape à faire c'est d'importer l'objet qui va nous permettre de faire ce travail, c'est l'objet
DecisionTreeClassifier du package sklearn.tree qui va nous permettre de créer un modèle de
prédiction qu'on appelle classifier puis utiliser sa fonction fit() sur les données d'entrée X_train et
des données de sortie y_train pour l'entrainer.

Le paramètre criterion de la méthode DecisionTreeClassifier définit le critère de segmentation des


nœuds de l'arbre. Elle permet l'utilisation de deux types de critère: L'entropie de Shannon 'entropy' ou l'indice de
diversité de Gini 'gini'.
D'autres paramètres peuvent être définit:
∙ max_depth pour limiter la profondeur de l’arbre (par défaut, pas de limites),
∙ min_samples split pour définir le nombre minimal d’exemples nécessaires pour développer un
nœud interne (2 par défaut)
∙ max_leaf_nodes pour définir le nombre maximal de feuilles de l’arbre.
Exemple:
Pour construire un arbre d'une profondeur maximal 3 et avec 5 feuilles au maximum, on écrit:

3. Visualisation de l'arbre de décision


Une fois l’apprentissage terminé, nous pouvons visualiser l’arbre avec matplotlib en passant par la
méthode plot_tree():

On peut aussi utiliser l’outil graphviz avec matplotlib :

3/6
Machine Learning
Faculté des sciences de Monastir
4. Evaluation de l'arbre de décision
Une fois que notre classifier est entrainée, on peut tester sa performance en l'exécutant sur les données de
test. En fait, nous allons donner à notre classifier les données d'entrée de test X_test, et on va voir est ce
qu'il est capable de bien prédire les sorties correspondantes qu'on va appeler y_pred. Pour faire ce travail
nous allons utiliser la fonction predict() du classifier.

Pour évaluer la performance de notre classifier d'une manière automatique, nous allons créer ce la matrice
de confusion qui permet de créer un résumé des résultats de prédictions correctes et incorrectes réparties
par classe. Les résultats sont ainsi comparés avec les valeurs réelles ce qui permet de savoir quel est le taux
d'erreur commit par le classifier.

4/6

Machine Learning
Faculté des sciences de Monastir

D'après la matrice de confusion, on voit bien que notre classifier est très performant, il n'arrive pas à bien
classer juste une seule observation parmi 30.

5. Prédictions pour de nouvelles entrées

Imaginez maintenant qu'au cours d'une promenade vous trouviez un iris, n'étant pas un spécialiste, il ne vous
est pas vraiment possible de déterminer l'espèce. En revanche, vous êtes capables de mesurer la longueur et
la largeur des pétales de cet iris. Partons du principe qu'un pétale fasse 2cm de long et 0,5cm de large. Pour
placer cette nouvelle donnée sur notre graphique, il nous suffit d'ajouter la ligne "plt.scatter(2.0, 0.5,
color='k')", le nouveau point va apparaitre en noir (color='k') :

La classe de cette nouvelle fleur est simple à trouver à partir des règles de décision établies de l'arbre
obtenue. En effet, puisque la longueur de son pétale est inférieure à 2,5 alors il s'agit d'un iris setosa.

Il est possible de rencontrer des cas plus difficiles, par exemple: largeur du pétale=0,75cm ; longueur du
pétale=2,5cm :
Dans ce genre de cas, il peut être intéressant d'utiliser l'algorithme de prédiction :

Le résultat de prédiction montre que cette nouvelle fleur est un iris virginica.

5/6

Vous aimerez peut-être aussi