TP 2 â M1 Info â Arbres de décisions 1 Apprendre un arbre de ...
TP 2 â M1 Info â Arbres de décisions 1 Apprendre un arbre de ...
TP 2 â M1 Info â Arbres de décisions 1 Apprendre un arbre de ...
- No tags were found...
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>TP</strong> 2 – <strong>M1</strong> <strong>Info</strong> – <strong>Arbres</strong> <strong>de</strong> décisions<br />
Le logiciel scikit-learn propose l’implantation <strong>de</strong> plusieurs algorithmes d’apprentissage d’<strong>arbre</strong>s<br />
<strong>de</strong> décision. L’objectif <strong>de</strong> ce <strong>TP</strong> est triple :<br />
– Découvrir <strong>de</strong>s <strong>arbre</strong>s <strong>de</strong> décision et leurs performances selon la nature <strong>de</strong>s échantillons,<br />
– Découvrir le sur-apprentissage, ses liens avec complexité <strong>de</strong> l’espace d’hypothèses,<br />
– Se familiariser avec l’entropie <strong>de</strong> Shannon.<br />
Ce <strong>TP</strong> est noté (<strong>de</strong>ux premières sections, la troisième en Bonus) : à l’issue du <strong>TP</strong> (<strong>un</strong><br />
envoi après 16h07 ne sera pas considéré), envoyez à votre enseignant <strong>un</strong>e archive contenant tout<br />
ce que vous avez réalisé (l’archive doit stocker vos programmes, vos commentaires et réponses aux<br />
questions sous forme txt – à taper au fur et à mesure –, quelques images en pdf ou png).<br />
Le sujet <strong>de</strong> l’email doit contenir l’expression ML<strong>M1</strong><strong>TP</strong>2 et votre nom, sous peine <strong>de</strong> se perdre dans les<br />
méandres <strong>de</strong>s spams.<br />
Une version finale <strong>de</strong> votre travail pourra être envoyée avant le dimanche 18 novembre 23h59.<br />
ATTENTION. Si les correcteurs remarquent <strong>de</strong>s similitu<strong>de</strong>s entre <strong>de</strong>ux rendus d’étudiants, similitu<strong>de</strong>s<br />
statistiquement impossibles par hasard, les <strong>de</strong>ux étudiants auront la note 0 (zéro). Les<br />
correcteurs s’appuient sur <strong>de</strong>s logiciels qui détectent automatiquement ces similitu<strong>de</strong>s (l’apprentissage<br />
automatique est très fort pour la détection <strong>de</strong> plagiats !), avec contrôle humain si nécessaire.<br />
En conséquence, ne trichez pas. Si vous avez réalisé le travail à plusieurs (ce n’est pas tricher, sauf<br />
si vous le cachez), dites le, avec <strong>un</strong> pourcentage <strong>de</strong> travail pour chaque auteur. La note finale sera<br />
logarithmiquement diminuée en fonction du nombre d’auteurs. C’est toujours mieux que 0.<br />
1 <strong>Apprendre</strong> <strong>un</strong> <strong>arbre</strong> <strong>de</strong> décision<br />
Le package sklearn.tree propose <strong>de</strong>s algorithmes d’apprentissage fondés sur les <strong>arbre</strong>s <strong>de</strong> décision<br />
(classification, régression), mais aussi la possibilité <strong>de</strong> visualiser les <strong>arbre</strong>s obtenus. Chaque algorithme<br />
d’apprentissage est paramétrable.<br />
Dans cette partie, l’objectif est <strong>de</strong> comparer, pour <strong>de</strong>ux échantillons <strong>de</strong> données, les performances<br />
<strong>de</strong>s <strong>arbre</strong>s <strong>de</strong> décision et celles du classifieur naïf <strong>de</strong> Bayes. On utilisera l’algorithme DecisionTree-<br />
Classifier.<br />
Pour ce faire :<br />
1. Produire <strong>un</strong> programme Python qui charge le jeu <strong>de</strong> données Iris, et qui estime, par validation<br />
croisée, les erreurs en généralisation du classifieur naïf <strong>de</strong> Bayes et d’<strong>un</strong> <strong>arbre</strong> <strong>de</strong> décision avec<br />
le paramétrage par défaut. Quelles performances obtenez-vous <br />
2. Est-ce que les performances <strong>de</strong> l’<strong>arbre</strong> <strong>de</strong> décision produit avec le critère Gini sont meilleures<br />
– égales – ou inférieures, aux performances obtenues avec le critère Entropie <br />
3. Quid <strong>de</strong>s performances <strong>de</strong> ces <strong>de</strong>ux algorithmes avec le jeu le données digits <br />
2 A la découverte <strong>de</strong> l’influence <strong>de</strong>s paramètres<br />
La fonction DecisionTreeClassifier <strong>de</strong> scikit-learn offre <strong>de</strong> nombreux paramètres.<br />
L’algorithme implémenté actuellement ne réalise pas d’élagage, et par défaut, la construction <strong>de</strong><br />
l’<strong>arbre</strong> est arrêtée lorsqu’<strong>un</strong> <strong>arbre</strong> parfait a été obtenu (ou lorsqu’il n’y a plus <strong>de</strong> progression <strong>de</strong><br />
l’erreur d’apprentissage).<br />
Nous allons voir que ces paramètres influencent la complexité <strong>de</strong> l’<strong>arbre</strong>, et sur ses performances.<br />
1. Expliquer les paramètres criterion, max <strong>de</strong>pth, min samples split et max features.<br />
2. Sur le jeu <strong>de</strong> données digits, faire varier la profon<strong>de</strong>ur maximum <strong>de</strong> 1 à 40, pour obtenir<br />
<strong>un</strong>e dizaine d’<strong>arbre</strong>s plus simples que l’<strong>arbre</strong> parfait (lorsque ce <strong>de</strong>rnier existe), le 10ème <strong>arbre</strong><br />
<strong>de</strong>vant contenir <strong>un</strong> seul test. Pour chac<strong>un</strong> <strong>de</strong> ces <strong>arbre</strong>s, indiquer :<br />
Université Aix-Marseille – 2013-2014
<strong>TP</strong> 2 – <strong>M1</strong> <strong>Info</strong> – <strong>Arbres</strong> <strong>de</strong> décisions<br />
– L’<strong>arbre</strong> lui-même (via la fonction sklearn.tree.export graphviz 1 ), son nombre <strong>de</strong> tests<br />
et sa profon<strong>de</strong>ur.<br />
– L’erreur en apprentissage.<br />
– Un estimation <strong>de</strong> l’erreur réelle par validation croisée.<br />
Qu’observe-t-on – à valeur croissante <strong>de</strong> la profon<strong>de</strong>ur maximum – quant à l’évolution <strong>de</strong>s<br />
erreur d’apprentissage et réelle Que constate-t’on lorsque l’erreur en apprentissage <strong>de</strong>vient<br />
nulle <br />
3. De la même façon, faire varier les trois autres paramètres. Dresser <strong>un</strong> tableau <strong>de</strong> résultats<br />
(erreur app. et erreur réelle) en fonction <strong>de</strong> plusieurs valeurs <strong>de</strong> chaque paramètre <strong>de</strong> l’algorithme.<br />
Peut-on indiquer quel est le meilleur <strong>arbre</strong> obtenu, et justifier <br />
4. On <strong>de</strong>man<strong>de</strong> maintenant d’ajouter du bruit aux données, c’est-à-dire que pour <strong>un</strong> certain<br />
nombre d’exemples <strong>de</strong> l’échantillon, leur classe est aléatoirement modifiée. Ce bruit – appelé<br />
bruit <strong>de</strong> classification – gêne évi<strong>de</strong>mment l’obtention d’<strong>un</strong> bon apprenant.<br />
Ce bruitage peut se réaliser grâce à la fonction ci-<strong>de</strong>ssous :<br />
import random<br />
from sklearn import datasets<br />
# ds : <strong>un</strong> echantillon<br />
# txb : le pourcentage d’exemples modifies<br />
<strong>de</strong>f add_noise(ds, txb=10):<br />
nb_samples = len(ds.data)<br />
nb_classes = len(ds.target_names)<br />
for i in range(nb_samples*txb/100):<br />
nc = random.randint(0, nb_classes-1)<br />
ni = random.randint(0, nb_samples-1)<br />
ds.target[ni]=nc<br />
return ds<br />
Reprendre les calculs et estimations <strong>de</strong>s erreurs en apprentissage et réelles, pour plusieurs<br />
profon<strong>de</strong>urs max <strong>de</strong> l’<strong>arbre</strong>, après bruitage <strong>de</strong> 5, 10 et 20% <strong>de</strong> l’échantillon. Que remarquet’on<br />
quand à l’évolution <strong>de</strong> ces erreurs Pouvez-vous commenter ce phénomène <br />
3 Stump, vous avez dit stump (non noté, mais du bonus)<br />
Un stump est <strong>un</strong> <strong>arbre</strong> <strong>de</strong> décision constitué d’<strong>un</strong> seul test à la racine, avec s réponses possibles à<br />
ce test. A chaque réponse possible, <strong>un</strong>e classe doit être attribuée.<br />
Créer <strong>un</strong>e fonction Python qui, à partir d’<strong>un</strong> dataset – data et target – (multiclasses, attributs<br />
continus, comme digits), calcule <strong>un</strong> stump en se fondant sur le critère d’entropie <strong>de</strong> Shannon pour<br />
calculer le gain en information : tester les performances <strong>de</strong> cet algorithme sur le jeu <strong>de</strong> données<br />
digits.<br />
Précisions : nous supposons travailler sur <strong>de</strong>s attributs continus, donc nous définissons s le nombre<br />
d’intervalles envisagé pour l’attribut à choisir : 2 ≤ s ≤ 10. Dans <strong>un</strong> premier temps, la fonction<br />
d’apprentissage considèrera que s est fixe (par exemple 2) ; puis, si le temps le permet, on fera varier<br />
s pour sélectionner le meilleur modèle <strong>de</strong> stump.<br />
1. Cette fonction exporte <strong>un</strong> <strong>arbre</strong> sous format DOT. On peut alors convertir ce format en PNG via la comman<strong>de</strong><br />
shell : dot -Tpng <strong>arbre</strong>15.dot -o <strong>arbre</strong>15.png<br />
Université Aix-Marseille – 2013-2014