Skip to main content
Arbre de décision

Comment créer un arbre de décision avec les algorithmes ID3 et CART ?

Les arbres de décision nous questionnent afin de déterminer une action à réaliser ou une catégorie d’appartenance d’un objet que nous interrogeons. Lors d’un précédent article, nous avons vu comment ils étaient composés et dans quel domaine, nous pouvions les utiliser. Dans cet article, nous allons nous intéresser à la conception d’un arbre de décision. Plus précisément, nous verrons les algorithmes qui nous permette de réaliser un arbre de décision.

Algorithme ID3 (Iterative Dichotomiser 3)

Nous avons à notre disposition un ensemble d’éléments contenant plusieurs caractéristiques. Notre objectif va être de déterminer nos questions à partir de ces caractéristiques. Ainsi, nous allons dans un premier temps déterminer la première question à poser. Pour ce faire, nous allons chercher à déterminer l’attribut qui sépare le mieux nos données. Une fois cette question obtenue, nous allons avoir un ensemble de réponses. Il nous suffira de répéter cette opération afin d’arrivée dans un état final. Ce type d’approche est une approche du haut vers le bas (Top-Down). En effet, nous partons de l’ensemble de nos données afin d’arrivée à un ensemble de sous-ensemble.

Afin de déterminer le meilleur attribut pour pouvoir poser notre question, nous allons utiliser, avec l’algorithme ID3, l’attribut ayant le gain d’information basé sur l’entropie le plus élevé. Pour cela, nous allons, à partir de nos données, calculer l’entropie qui caractérise le degré de désorganisation de nos données. Pour visualiser cela, on peut imaginer une chambre d’un étudiant qui est mal ranger. Ainsi, cette chambre aura une entropie élevée. Le calcul de l’entropie va nous permettre de savoir quel attribut nous allons sélectionner afin de poser notre question dans le nœud de notre arbre. Ainsi, nous sélectionnerons l’attribut ayant une entropie la plus importante, car cela signifie que l’attribut en question possède différentes catégories. En revanche, un attribut avec une entropie faible signifie qu’il y a peu d’éléments différents. Enfin, une entropie nulle signifie que tous les éléments sont de la même catégorie.

Calcul de l’entropie – Entropie de Shannon

H(S)=-\sum_{c \in C} p(c)*log_2 p(c)

Nous avons :

  • S : L’ensemble des données actuelles, où nous souhaitons calculer l’entropie.
  • C : l’ensemble des classes de S. Ici : {“oui”, “non”}
  • p(c) : La proportion du nombre d’éléments appartenant à une classe c par rapport à l’ensemble des éléments présents dans S.

Note : Quand nous avons H(S) = 0, cela signifie que tous nos éléments appartiennent à la même catégorie.

Calcul du gain d’information

Le gain d’information (Information Gain – IG), mesure la différence d’entropie entre ce que nous avions de base et par rapport à ce que nous avons obtenus lorsque nous avons séparé notre ensemble par l’attribut A. En d’autres termes, nous cherchons à savoir de combien le gain d’information a-t-il était réduit dans S lorsque nous avons séparé nos données avec l’attribut A.

IG(A,S)=H(S)-\sum_{t \in T} p(t)H(t)

Avec :

  • H(S) : L’entropie de notre ensemble de données S.
  • T : Le sous ensemble crée à partir de S que nous avons séparé avec l’attribut A. Ainsi, si nous faisons l’union de tous les sous-ensembles créer, nous obtenons S. Mathématiquement, nous avons :
S=\bigcup_{t\in T}t
  • p(t) : La proportion d’un nombre d’éléments dans t par rapport au nombre d’éléments dans l’ensemble S.
  • H(t) : L’entropie du sous-ensemble t.

Fonctionnement de l’algorithme ID3

  • Calculer l’entropie pour chaque ensemble de données.
  • Pour chaque attribut :
    • Calculer l’entropie pour toutes les catégories.
    • Prendre la moyenne de l’information de l’entropie pour l’actuel attribut.
    • Calculer le gain pour l’attribut courant.
  • Prendre le plus grand gain d’attribut .
  • Répéter cela dans les sous-arbres jusqu’à ce que l’on obtienne l’arbre désiré.

Un peu de pratique

Nous avons vu tous les principes nécessaires afin de fabriquer notre arbre de décision. Afin d’illustrer tous cela, nous allons réaliser un exemple d’application qui nous permettra d’avoir une meilleure compréhension du fonctionnement de notre algorithme. Dans notre exemple, nous avons créé un tableau nous indiquant si un enfant joue dehors ou non en fonction de différents paramètre.

TempsTempératureVentJouer dehors
soleilchaudfauxoui
soleilchaudvraioui
pluitfroidvrainon
pluitchaudfauxoui
nuageuxfroidvrainon

L’objectif va être de créer un arbre de décision à partir de ces informations. Pour cela, la première étape consiste à calculer l’entropie de notre ensemble de départs. Nous appliquons donc l’entropie de Shannon que nous avons vu précédemment pour chacune des résultats de jouer. Nous avons donc deux catégories : oui et non.

J_{oui}=-\frac{3}{5}*log_2(\frac{3}{5})=0.4421J_{non}=-\frac{2}{5}*log_2(\frac{2}{5})=0.5287H(S) = J_{oui} + J_{non}=0.9708

Maintenant, nous allons devoir, pour chaque attribut, calculer l’entropie et le gain d’information.

Calcul pour le Temps

Temps_{Soleil}=-1log_2(1)=0Temps_{Pluit}=-\frac{1}{2}log_2(\frac{1}{2})-\frac{1}{2}log_2(\frac{1}{2})=1Temps_{Nuageux}=0IG_{Temps}=\frac{2}{5}*0+\frac{2}{5}*1+\frac{1}{5}*0=\frac{2}{5}=0.4

Calcul pour la Température

Température_{Chaud}=0Température_{Froid}=0IG_{Température}=0

Calcul pour le Vent

Vent_{Faux}=0Vent_{Vrai}=-\frac{2}{3}log_2(\frac{2}{3})-\frac{1}{3}log_2(\frac{1}{3})=0.9182IG_{Vent}=\frac{3}{5}*0.9182=0.5509

Calcul du gain par rapport à nos données

Gain_{temps}=H(S)-IG_{Temps}=0.9708-0.4=0.5708Gain_{Température}=H(S)-IG_{Température}=0.9708-0=0.9708Gain_{Vent}=-H(S)-IG_{Vent}=0.9708-0.5509=0.4199

Ici, nous allons sélectionner le gain le plus important. Nous pouvons constater que c’est la température.

TempsTempératureVentJouer dehors
soleilchaudfauxoui
soleilchaudvraioui
pluitfroidvrainon
pluitchaudfauxoui
nuageuxfroidvrainon

Comme nous pouvons le constater, l’ensemble de nos données sont bien séparer. En effet, dans les deux sous-arbres que nous obtenons, nous avons bien nos éléments appartenant à la même catégorie. Bien entendu, un œil averti aurait remarqué dès le début que nous pouvions séparer nos données en se basant sur l’attribut température. Cependant, cet exemple nous permet de mettre en pratique cet algorithme. Bien entendu, il se peut que vous construisiez des arbres de décision bien plus complexe. Ainsi, vous devrez renouveler cette étape, pour chaque sous-arbre que vous obtenez jusqu’à obtenir un arbre satisfaisait.

Algorithme CART (Classification And Regression Trees)

Afin de construire des arbres de décision, différents algorithmes existent. Nous allons maintenant nous pencher sur le cas de l’algorithme CART. Ce dernier utilise l’indice de Gini contrairement à l’algorithme ID3 qui utilise l’entropie.

Indice de Gini

GINI=1-\sum_{c \in C}p(c)²

Avec :

  • C : Ensemble des sous-ensembles. Dans notre cas, nous l’avons obtenu en séparant notre ensemble de bases par rapport à un attribut. Mathématiquement, nous avons :
C=\bigcup_{c\in T}c
  • p(c) : Proportion d’élément dans c par rapport au nombre d’éléments dans l’ensemble C.

Fonctionnement de l’algorithme Gini

  • Calcul de l’indice de Gini pour nos ensembles de données
  • Pour chaque attribut
    • Calculer l’indice de Gini pour chaque catégorie
    • Calculer le gain d’information en utilisant l’indice de Gini
  • Prendre l’attribut qui possède le meilleur gain d’information
  • Répéter cela dans les sous-arbres jusqu’à ce que l’on obtienne l’arbre désiré.

Cas d’application

Afin de pouvoir comprendre le fonctionnement de cet algorithme, nous allons réaliser cet algorithme sur un exemple comme nous l’avons fait pour l’algorithme ID3. Nous allons nous baser sur le même problème que précédemment, à savoir :

TempsTempératureVentJouer dehors
soleilchaudfauxoui
soleilchaudvraioui
pluitfroidvrainon
pluitchaudfauxoui
nuageuxfroidvrainon

La première étape consiste à calculer l’indice de Gini pour notre ensemble de données de base. Ainsi, nous allons avoir :

Gini_S=p(jouer=non)²-p(jouer=oui)²Gini_S=1-(\frac{3}{5})^2-(\frac{2}{5})^2=0.48

Nous allons, maintenant, pour chaque catégorie calculer le gain d’information en utilisant toujours l’indice de GINI.

\Delta=Gini_{Parent}-\sum_j^{children}\frac{N_j}{N}*Gini_j

Pour le temps

\Delta=0.48-(0*\frac{2}{5}+0.5*\frac{2}{5}+0*\frac{1}{5})=0.48-0.2=0.28

Pour la température

\Delta =0.48-0=0.48

Pour le vent

\Delta=0.48-(\frac{3}{5}*(1-(\frac{1}{3})^2-(\frac{2}{3})^2)+\frac{2}{5}*0)=0.213

Une fois que nous avons calculé pour chacun des attributs le gain d’information, nous allons sélectionner celui qui a la valeur la plus importante. Dans notre cas, c’est l’attribut pour la température. Et nous répétons cette opération jusqu’à obtenir un état final de notre arbre. Ici, c’est déjà le cas.

Élagage de l’arbre

L’arbre que nous venons de créer, à partir de nos données d’entraînements, correspond à un arbre qui a appris par cœur. Le problème, que nous pouvons rencontrer avec ce genre d’arbre, est qu’il a du mal à généraliser. De plus, il est fort probable que notre arbre contienne des branches complexes. C’est-à-dire, des branches qui nécessitent énormément de questions, qui ont été créer à cause d’une instance particulière. Or, il se peut que cette instance soit un cas particulier. Ainsi, notre objectif est d’obtenir un arbre qui généralise le plus possible. Nous voulons donc que notre arbre soit à la fois simple et concis.

Nous allons devoir modifier notre arbre afin de le simplifier. Pour ce faire, nous allons réaliser un élagage (prunning). Cela consiste à retirer des feuilles, voir des branches peu représentatives tous en cherchant à garder un arbre performant. L’une des premières possibilités serait de stopper la construction de l’arbre à partir d’un certain stade. En effet, on pourrait se dire qu’à partir d’un certain seuil, nous arrêtons la construction de notre arbre. Cependant, avec cette méthode, nous n’explorons pas l’ensemble des possibilités. De ce fait, il se peut que nous manquions des cas majeurs lors de la construction de notre arbre.

Sélectionner le meilleur sous-arbre

Une autre méthode d’élagage consiste à créer un ensemble d’arbres qui sont des sous-arbres de l’arbre final que nous avons. Puis, nous allons chercher à obtenir le meilleur arbre parmi notre ensemble d’arbres. Pour ce faire, nous allons tester notre arbre sur notre base de validation. L’arbre obtenant le meilleur score sera l’arbre que nous garderons. Cette approche est intéressante, cependant si notre arbre est conséquent, alors nous aurons du mal a tester toutes les possibilités possibles.

Supprimer certaines feuilles

Enfin, une autre possibilité serait de supprimer certaines feuilles et de mettre la classe majoritaire au nœud supérieur. Cela permet de simplifier notre arbre. Cependant, cette simplification ne doit pas se faire à l’extrême. En effet, il est préférable de le faire lorsque nous avons 100 instances identiques dans la sous-branche de gauche et 1 instance différente dans la sous-branche de droit. De plus, à trop vouloir généraliser, il se peut que nous omettons des cas particulier qui existent réellement. Cependant, c’est un compromis à faire permettant de rendre notre arbre plus simple et pus rapide.

Conclusion

Lors de cet article, nous avons vu deux algorithmes afin de créer des arbres de décision. Le premier est l’algorithme ID3 utilisant l’entropie. Le second est l’algorithme CART utilisant l’indice de GINI. Ces deux méthodes nous permettent de créer un arbre basé sur notre base d’apprentissage. Cet arbre peut parfois être complexe de part les cas parfois particuliers qui peuvent le composer. Afin d’éviter ce sur-apprentissage, nous pouvons élaguer notre arbre en le simplifiant. Cependant, nous devons faire des compromis et parfois perdre des questions qui peuvent être pertinente pour la réalisation d’une classification.

Source

https://fr.wikipedia.org/wiki/Arbre_de_d%C3%A9cision_(apprentissage)

https://fr.wikipedia.org/wiki/Algorithme_ID3

https://fr.wikipedia.org/wiki/Algorithme_CART

https://fr.wikipedia.org/wiki/Coefficient_de_Gini

https://fr.wikipedia.org/wiki/Entropie_de_Shannon

https://medium.com/deep-math-machine-learning-ai/chapter-4-decision-trees-algorithms-b93975f7a1f1

https://towardsdatascience.com/decision-tree-an-algorithm-that-works-like-the-human-brain-8bc0652f1fc6

Régis Graptin

Passionné par l'informatique, et plus précisément dans le domaine de l'intelligence artificielle, je souhaite transmettre mon savoir tout en partageant ma passion.https://fr.linkedin.com/in/regis-graptin

One thought to “Comment créer un arbre de décision avec les algorithmes ID3 et CART ?”

  1. ID3 et CART ont ete inventees de maniere independante dans les decennies 1970-1980, mais utilisent des approches similaires pour apprendre des arbres de decision depuis l’ensemble d’apprentissage.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *