Académique Documents
Professionnel Documents
Culture Documents
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.
En 1936, Edgar Anderson a collecté des données sur 3 espèces d'iris: "iris setosa", "iris virginica" et "iris
versicolor"
1/6
Université Sidi Mohamed Ben Abdallah de Fès
Département Mathématiques, Physique & Informatique Master SIM
Faculté Polydisciplinaire de Taza Machine & Deep learning
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.
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.
# Subdivision des données en jeu d'entrainement et jeu de teste
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.20,
random_state = 0)
2/6
Université Sidi Mohamed Ben Abdallah de Fès
Département Mathématiques, Physique & Informatique Master SIM
Faculté Polydisciplinaire de Taza Machine & Deep learning
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.
# Creation du classifier
from sklearn.tree import DecisionTreeClassifier
classifier = DecisionTreeClassifier(criterion='gini', random_state=O)
# Entrainement du classifier
classifier.fit(X_train,y_train)
Une fois l’apprentissage terminé, nous pouvons visualiser l’arbre avec matplotlib en passant par la
méthode plot_tree():
# Visualisation
tree.plot_tree(classifier, feature_names= X_names)
3/6
Université Sidi Mohamed Ben Abdallah de Fès
Département Mathématiques, Physique & Informatique Master SIM
Faculté Polydisciplinaire de Taza Machine & Deep learning
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.
# Création de la matrice de confusion
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)
Matrice de confusion
4/6
Université Sidi Mohamed Ben Abdallah de Fès
Département Mathématiques, Physique & Informatique Master SIM
Faculté Polydisciplinaire de Taza Machine & Deep learning
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.
A réaliser: Extraire toutes les règles de prise de décision à partir du graphe de l'arbre précédemment obtenu?
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 :
# Prédiction de sa classe
Prediction = classifier.predict([[longueur,largeur]])
Le résultat de prédiction montre que cette nouvelle fleur est un iris virginica.
5/6
Université Sidi Mohamed Ben Abdallah de Fès
Département Mathématiques, Physique & Informatique Master SIM
Faculté Polydisciplinaire de Taza Machine & Deep learning
6. Réalisation
Les arbres de décision peuvent aussi être utilisés pour des problèmes de régression. Dans cette réalisation,
étudiez la base de données vinegar_quality.csv: Il s’agit de prédire la qualité d’un vinaigre en fonction de ses
différentes caractéristiques chimiques.
La dernière colonne correspond à la qualité du vinaigre qui est représentée par une valeur entière. Comme
précédemment, récupérerz la base, analysez les données et effectuez un apprentissage avec un arbre de
décision.
Indication:
Pour évaluer la performance de votre algorithme d'apprentissage, utilisez la méthode de calcul de l'erreur
quadratique mean_squared_erreur()de la bibliothèque sklearn.metrics:
7. Références
Rokach, Lior, Maimon, Data mining with decision trees: theory and applications, 2nd Ed, World Scientific
Pub Co Inc., 2015.
Hastie, Tibshirani, Friedman, The elements of statistical learning: data mining, inference, and
prediction. New York: Springer Verlag, 2006.
Cornuejols, A., Miclet, L., Apprentissage Artificiel, Concepts et Algorithmes, Eyrolles, 2010.
6/6