Pelo que entendi, o argumento cp para a rpart
função ajuda a pré-podar a árvore da mesma maneira que os argumentos minsplit ou minbucket. O que não entendo é como os valores de CP são calculados. Por exemplo
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)
Árvore resultante ...
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) *
Resumo ...
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
De onde vêm os .666 e .01?
Respostas:
Eu estava procurando o mesmo há muitos dias e vim a saber que o cálculo do valor cp é feito por pacote. Por padrão, se você não especificar o valor "CP", o rpart assumirá o valor 0,01. O valor de Cp é o custo da adição de nó à árvore.
fonte
O parâmetro de complexidade (cp) no rpart é a melhoria mínima no modelo necessário em cada nó. É baseado na complexidade de custo do modelo definido como
Para a árvore especificada, adicione a classificação incorreta em cada nó do terminal. Multiplique o número de divisões por um termo de penalidade (lambda) e adicione-o à classificação incorreta total. O lambda é determinado por validação cruzada e não é relatado em R.
Para modelos de regressão (consulte a próxima seção), o cp escalado tem uma interpretação muito direta: se qualquer divisão não aumentar o R2 geral do modelo em pelo menos cp (onde R2 é a definição usual de modelos lineares), essa divisão será decretada como a priori, não vale a pena perseguir. Veja o documento longintro para rpart
fonte