¿Organizar un árbol de clasificación (en rpart) en un conjunto de reglas?

11

¿Hay alguna manera de que una vez que se construya un árbol de clasificación complejo usando rpart (en R), para organizar las reglas de decisión producidas para cada clase? Entonces, en lugar de obtener un árbol enorme, ¿obtenemos un conjunto de reglas para cada una de las clases?

(¿si es así, cómo?)

Aquí hay un ejemplo de código simple para mostrar ejemplos en:

fit <- rpart(Kyphosis ~ Age + Number + Start, data=kyphosis)

Gracias.

Tal Galili
fuente

Respuestas:

9

Tal funcionalidad (o una cercana) parece estar disponible en el paquete sonajero , como se describe en RJournal 1/2 2009 (p. 50), aunque solo lo verifiqué desde la línea de comandos.

Para su ejemplo, produce el siguiente resultado:

 Rule number: 3 [Kyphosis=present cover=19 (23%) prob=0.58]
   Start< 8.5

 Rule number: 23 [Kyphosis=present cover=7 (9%) prob=0.57]
   Start>=8.5
   Start< 14.5
   Age>=55
   Age< 111

 Rule number: 22 [Kyphosis=absent cover=14 (17%) prob=0.14]
   Start>=8.5
   Start< 14.5
   Age>=55
   Age>=111

 Rule number: 10 [Kyphosis=absent cover=12 (15%) prob=0.00]
   Start>=8.5
   Start< 14.5
   Age< 55

 Rule number: 4 [Kyphosis=absent cover=29 (36%) prob=0.00]
   Start>=8.5
   Start>=14.5

Para obtener esta salida, obtengo el rattle/R/rpart.Rarchivo fuente (del paquete fuente) en mi espacio de trabajo, después de haber eliminado las dos llamadas a Rtxt()en la asRules.rpart()función (también puede reemplazarlo por print). Entonces, solo escribo

> asRules(fit)
chl
fuente
¿Es posible imprimir reglas para hojas no terminales también?
user1700890
3

El paquete rpart.plot versión 3.0 (julio de 2018) tiene una función rpart.rulespara generar un conjunto de reglas para un árbol. Por ejemplo

library(rpart.plot)
fit <- rpart(Kyphosis ~ Age + Number + Start, data=kyphosis)
rpart.rules(fit)

da

Kyphosis
    0.00 when Start >=      15
    0.00 when Start is 9 to 15 & Age <  55
    0.14 when Start is 9 to 15 & Age >=       111
    0.57 when Start is 9 to 15 & Age is 55 to 111
    0.58 when Start <  9

Para obtener más ejemplos, consulte el Capítulo 4 de la viñeta rpart.plot .

Stephen Milborrow
fuente
Impresionante referencia, también sería muy útil tener un número de hoja al lado de la regla
user1700890
1
Se usa rpart.rules(fit, nn=TRUE)para obtener los números de nodo (también conocidos como los números de hoja).
Stephen Milborrow