TP 2 – M1 Info – Arbres de d´ecisions
Le logiciel scikit-learn propose l’implantation de plusieurs algorithmes d’apprentissage d’arbres
de d´ecision. L’objectif de ce TP est triple :
— D´ecouvrir des arbres de d´ecision et leurs performances selon la nature des ´echantillons,
— D´ecouvrir le sur-apprentissage, ses liens avec complexit´e de l’espace d’hypoth`eses,
— Se familiariser avec l’entropie de Shannon.
1 Apprendre un arbre de d´ecision
Le package sklearn.tree propose des algorithmes d’apprentissage fond´es sur les arbres de d´ecision
(classification, r´egression), mais aussi la possibilit´e de visualiser les arbres obtenus. Chaque algo-
rithme d’apprentissage est param´etrable.
Dans cette partie, l’objectif est de comparer, pour deux ´echantillons de donn´ees, les performances
des arbres de d´ecision et celles du classifieur na¨ıf de Bayes. On utilisera l’algorithme DecisionTree-
Classifier.
Pour ce faire :
1. Produire un programme Python qui charge le jeu de donn´ees Iris, et qui estime, par valida-
tion crois´ee, les erreurs en g´en´eralisation du classifieur na¨ıf de Bayes et d’un arbre de d´ecision
avec le param´etrage par d´efaut. Quelles performances obtenez-vous ?
2. Est-ce que les performances de l’arbre de d´ecision produit avec le crit`ere Gini sont meilleures
– ´egales – ou inf´erieures, aux performances obtenues avec le crit`ere Entropie ?
3. Quid des performances de ces deux algorithmes avec le jeu le donn´ees digits ?
2 A la d´ecouverte de l’influence des param`etres
La fonction DecisionTreeClassifier de scikit-learn offre de nombreux param`etres.
L’algorithme impl´ement´e actuellement ne r´ealise pas d’´elagage, et par d´efaut, la construction de
l’arbre est arrˆet´ee lorsqu’un arbre parfait a ´et´e obtenu (ou lorsqu’il n’y a plus de progression de
l’erreur d’apprentissage).
Nous allons voir que ces param`etres influencent la complexit´e de l’arbre, et sur ses performances.
1. Expliquer les param`etres criterion,max depth,min samples split et max features.
2. Sur le jeu de donn´ees digits, faire varier la profondeur maximum de 1 `a 40, pour obtenir une
dizaine d’arbres plus simples que l’arbre parfait (lorsque ce dernier existe), le 10`eme arbre
devant contenir un seul test. Pour chacun de ces arbres, indiquer :
— L’arbre lui-mˆeme (via la fonction sklearn.tree.export graphviz 1), son nombre de tests
et sa profondeur.
— L’erreur en apprentissage.
— Un estimation de l’erreur r´eelle par validation crois´ee.
Qu’observe-t-on – `a valeur croissante de la profondeur maximum – quant `a l’´evolution des
erreur d’apprentissage et r´eelle ? Que constate-t’on lorsque l’erreur en apprentissage devient
nulle ?
3. De la mˆeme fa¸con, faire varier les trois autres param`etres. Dresser un tableau de r´esultats
(erreur app. et erreur r´eelle) en fonction de plusieurs valeurs de chaque param`etre de l’algo-
rithme.
Peut-on indiquer quel est le meilleur arbre obtenu, et justifier ?
1. Cette fonction exporte un arbre sous format DOT. On peut alors convertir ce format en PNG via la commande
shell : dot -Tpng arbre15.dot -o arbre15.png
Universit´e Aix-Marseille – 2014-2015