Comment les valeurs de CP (complexité des coûts) sont-elles calculées dans RPART (ou les arbres de décision en général)

9

D'après ce que je comprends, l'argument cp de la rpartfonction aide à pré-élaguer l'arbre de la même manière que les arguments minsplit ou minbucket. Ce que je ne comprends pas, c'est comment les valeurs CP sont calculées. Par exemple

df<-data.frame(x=c(1,2,3,3,3,4), y=as.factor(c(TRUE, TRUE, FALSE, TRUE, FALSE, FALSE)), method="class")
mytree<-rpart(y ~ x, data = df, minbucket = 1, minsplit=1)

Arbre résultant ...

mytree
n= 6 

node), split, n, loss, yval, (yprob)
      * denotes terminal node

1) root 6 3 FALSE (0.5000000 0.5000000)  
  2) x>=2.5 4 1 FALSE (0.7500000 0.2500000) *
  3) x< 2.5 2 0 TRUE (0.0000000 1.0000000) *

Sommaire...

summary(mytree)

Call:
rpart(formula = y ~ x, data = df, minbucket = 1, minsplit = 1)
  n= 6 

         CP nsplit rel error    xerror      xstd
1 0.6666667      0 1.0000000 2.0000000 0.0000000
2 0.0100000      1 0.3333333 0.6666667 0.3849002

D'où viennent les .666 et .01?

Ben
la source
Veuillez vérifier mes réponses dans cet article
Haitao Du
C'est la diminution de l'erreur rel au niveau suivant de l'arbre. Il y a peut-être une autre explication, mais à mon avis, je préfère la simple
cloudscomputes

Réponses:

2

Je cherchais la même chose depuis plusieurs jours et j'ai appris une chose que le calcul de la valeur cp est pris en charge par package. Par défaut, si vous ne spécifiez pas de valeur "CP", rpart prendra alors 0,01. La valeur Cp est le coût de l'ajout d'un nœud à l'arbre.

Nikhil
la source
Je suppose que cela vient de la page 24 du cran.r-project.org/web/packages/rpart/vignettes/longintro.pdf
user1700890
2

Le paramètre de complexité (cp) dans rpart est l'amélioration minimale du modèle nécessaire à chaque nœud. Il est basé sur la complexité des coûts du modèle défini comme entrez la description de l'image ici

Pour l'arbre donné, additionnez la classification erronée à chaque nœud terminal. Multipliez ensuite le nombre de fractionnements du temps d'un terme de pénalité (lambda) et ajoutez-le à la classification erronée totale. Le lambda est déterminé par validation croisée et n'est pas rapporté dans R.

Pour les modèles de régression (voir la section suivante), le cp échelonné a une interprétation très directe: si un fractionnement n'augmente pas le R2 global du modèle d'au moins cp (où R2 est la définition habituelle des modèles linéaires), alors ce fractionnement est décrété comme être, a priori, pas la peine de poursuivre. Voir le document longintro pour rpart

Akshay Kadidal
la source
Source de mon premier commentaire: learnbymarketing.com/tutorials/rpart-decision-trees-in-r
Akshay Kadidal