> Statistiques > Apprentissage > Arbres de décision (tree)
Arbres de décision (tree)
Implémentation documentée ici : tree. Attention, il faut charger la librairie par library(tree)
tree : permet de construire des arbres de décision binaires :
- à chaque niveau, on cherche quelle variable et quel splitpermet de maximiser la réduction de l'impureté.
- pour les variables numériques, les splits sont x < a et x > a
- pour les variables de tye facteurs, les splits sont en 2 groupes de valeurs des facteurs.
Exemple :
- data(iris); tr <- tree(Species ~ Sepal.Width + Petal.Width, iris)
- On peut choisir la fonction d'estimation de l'impureté : tr <- tree(Species ~ Sepal.Width + Petal.Width, iris, split = "deviance") ("deviance" pour fonction d'entropie, "gini" pour indice de Gini, le défaut est "deviance").
- l'algorithme ne peut pas prendre de termes d'interactions entre variables.
Valeurs retournées par tree :
- l'objet retourné, ici tr, est de la classe tree.
- on peut voir l'arbre de manière textuelle simplement en affichant la variable tr.
- tr$frame : frame avec une ligne par noeud (var : variable de split, n : nombre d'observations pour le noeud, dev : impureté du noeud, yval : valeur attribuée au noeud (moyenne dans le cas d'arbres de regression), splits.cutleft et splits.cutright : critères de split, yprob.* : probabilité de chaque catégorie.
- tr$where : vecteur de longueur le nombre d'observations et indiquant pour chaque observation le numéro de ligne du noeud dans tr$frame auquel l'observation est attribuée.
Prédiction sur des nouvelles valeurs :
- predict(tr, newdata = list(Sepal.Width = c(5, 6), Petal.Width = c(3, 3))) : donne pour chaque facteur la probabilité
- predict(tr, newdata = list(Sepal.Width = c(5, 6), Petal.Width = c(3, 3)), type = "class") : donne le facteur qui a la plus forte probabilité.
Représentation de l'arbre :
- plot(tr) : imprime l'arbre.
- text(tr) : imprime ensuite les étiquettes et critères de split.
- text(tr, pretty = 0) : mettre pretty à 0 si les critères de split comportent des facteurs pour afficher les noms complets de ceux-ci.
Avec tree, dans le cas où on a 2 variables, on peut voir comment se fait spatialement le partionnement :
- plot(Sepal.Width ~ Petal.Width, iris, col = as.numeric(iris$Species), pch = 19); legend("topright", legend = levels(iris$Species), col = seq(levels(iris$Species)), pch = 19)
- partition.tree(tr, label = "Species", add = TRUE)
Cross-validation et pruning :
- on peut utiliser cv.tree pour faire de la cross-validation et trouver la deviance en fonction de du paramètre k de coût : plot(cd.tree(tr))
- on peut aussi afficher le nombre d'erreurs en y plutôt que la deviance : plot(cd.tree(tr, method = "misclass"))
- on peut alors faire du pruning sur l'arbre avec le paramètre k optimum : newtr <- prune.tree(tr, k = 10)
Copyright Aymeric Duclert
programmer en R, tutoriel R, graphes en R