Por lo que entiendo, el argumento cp de la rpart
función ayuda a podar previamente el árbol de la misma manera que los argumentos minplit o minbucket. Lo que no entiendo es cómo se calculan los valores de CP. Por ejemplo
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)
Árbol 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) *
Resumen...
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 dónde vienen los .666 y .01?
Respuestas:
Estaba buscando lo mismo desde hace muchos días y llegué a saber una cosa que el cálculo del valor de cp se realiza por paquete. Por defecto, si no especifica el valor "CP", rpart tomará su valor 0.01. El valor de Cp es el costo de agregar un nodo al árbol.
fuente
El parámetro de complejidad (cp) en rpart es la mejora mínima en el modelo necesario en cada nodo. Se basa en la complejidad de costos del modelo definido como
Para el árbol dado, sume la clasificación errónea en cada nodo terminal. Luego, multiplique el número de divisiones por un período de penalización (lambda) y agréguelo a la clasificación errónea total. La lambda se determina mediante validación cruzada y no se informa en R.
Para los modelos de regresión (ver la siguiente sección), el cp escalado tiene una interpretación muy directa: si alguna división no aumenta el R2 general del modelo por al menos cp (donde R2 es la definición usual de modelos lineales), entonces esa división se decrementa a ser, a priori, no vale la pena perseguir. Vea el documento de introducción para rpart
fuente