Como os valores de CP (Complexidade de custo) são calculados no RPART (ou em árvores de decisão em geral)

9

Pelo que entendi, o argumento cp para a rpartfunçã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?

Ben
fonte
Por favor, verifique minhas respostas neste post
Haitao Du
Essa é a diminuição do erro rel para o próximo nível da árvore. Talvez haja outra explicação, mas, na minha opinião, eu prefiro a mais simples
cloudscomputes

Respostas:

2

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.

Nikhil
fonte
Eu acho que está vindo da página 24 do seguinte cran.r-project.org/web/packages/rpart/vignettes/longintro.pdf
user1700890
2

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 insira a descrição da imagem aqui

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

Akshay Kadidal
fonte
Fonte do meu primeiro comentário: learnbymarketing.com/tutorials/rpart-decision-trees-in-r
Akshay Kadidal