Algorithme ID3
L’algorithme ID3 a été développé à l’origine par Ross Quinlan[1]. C’est un algorithme de classification supervisé, c’est-à-dire qu'il se base sur des exemples déjà classés dans un ensemble de classes pour déterminer un modèle de classification. Le modèle que produit ID3 est un arbre de décision. Cet arbre servira à classer de nouveaux échantillons.
Pour les articles homonymes, voir ID3.
L'algorithme C4.5[2] est une amélioration d'ID3, notamment du point de vue de la facilité d'implémentation.
Principe général
Chaque exemple en entrée est constitué d'une liste d'attributs. Un de ces attributs est l’attribut « cible » et les autres sont les attributs « non cibles ». On appelle aussi cette "cible" la "classe". En fait l’arbre de décision va permettre de prédire la valeur de l’attribut « cible » à partir des autres valeurs. Bien entendu, la qualité de la prédiction dépend des exemples : plus ils sont variés et nombreux, plus la classification de nouveaux cas sera fiable.
Un arbre de décision permet de remplacer un expert humain dont il modélise le cheminement intellectuel. À chaque nœud correspond une question sur un attribut non cible. Chaque valeur différente de cet attribut sera associée à un arc ayant pour origine ce nœud. Les feuilles de l'arbre, quant à elles, indiquent la valeur prévue pour l’attribut cible relativement aux enregistrements contenus par la branche (indiqués par les différents arcs) reliant la racine à cette feuille.
ID3 construit l'arbre de décision récursivement. À chaque étape de la récursion, il calcule parmi les attributs restant pour la branche en cours, celui qui maximisera le gain d'information. C’est-à-dire l'attribut qui permettra le plus facilement de classer les exemples à ce niveau de cette branche de l'arbre. On appelle ce calcul l'entropie de Shannon dont voici la formule utilisée :
Algorithme
fonction ID3(exemples, attributCible, attributsNonCibles)
si exemples est vide alors /* Nœud terminal */
retourner un nœud Erreur
sinon si attributsNonCibles est vide alors /* Nœud terminal */
retourner un nœud ayant la valeur la plus représentée pour attributCible
sinon si tous les exemples ont la même valeur pour attributCible alors /* Nœud terminal */
retourner un nœud ayant cette valeur
sinon /* Nœud intermédiaire */
attributSélectionné = attribut maximisant le gain d'information parmi attributsNonCibles
attributsNonCiblesRestants = suppressionListe(attributsNonCibles, attributSélectionné)
nouveauNœud = nœud étiqueté avec attributSélectionné
pour chaque valeur de attributSélectionné faire
exemplesFiltrés = filtreExemplesAyantValeurPourAttribut(exemples, attributSélectionné, valeur)
nouveauNœud->fils(valeur) = ID3(exemplesFiltrés, attributCible, attributsNonCiblesRestants)
finpour
retourner nouveauNœud
Références
- J. Ross Quinlan, Machine Learning, 1986, « Induction of decision trees », p. 81-106
Voir aussi
Notes et références
- Quinlan, J. R. 1986. Induction of Decision Trees. Mach. Learn. 1, 1 (Mar. 1986), 81–106
- Quinlan, J. R. C4.5: Programs for Machine Learning. Morgan Kaufmann Publishers, 1993.
- Portail de l'informatique théorique
- Portail de la programmation informatique