D'après ce que je comprends, l'argument cp de la rpart
fonction 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?
Réponses:
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.
la source
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
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
la source