Organizando uma árvore de classificação (em rpart) em um conjunto de regras?

11

Existe uma maneira de uma vez que uma árvore de classificação complexa seja construída usando rpart (em R), para organizar as regras de decisão produzidas para cada classe? Então, em vez de obter uma árvore enorme, temos um conjunto de regras para cada uma das classes?

(se sim, como?)

Aqui está um exemplo de código simples para mostrar exemplos:

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

Obrigado.

Tal Galili
fonte

Respostas:

9

Essa funcionalidade (ou estreita) parece estar disponível no pacote rattle , como descrito no RJournal 1/2 2009 (p. 50), embora eu só tenha verificado isso na linha de comando.

Para o seu exemplo, ele gera a seguinte saída:

 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 obter essa saída, origino o rattle/R/rpart.Rarquivo de origem (do pacote de origem) no meu espaço de trabalho, depois de remover as duas chamadas Rtxt()na asRules.rpart()função (você também pode substituí-lo print). Então, eu apenas digito

> asRules(fit)
chl
fonte
É possível imprimir regras para folhas não terminais também?
user1700890
3

O pacote rpart.plot versão 3.0 (julho de 2018) tem uma função rpart.rulespara gerar um conjunto de regras para uma árvore. Por exemplo

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

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 mais exemplos, consulte o Capítulo 4 da vinheta rpart.plot .

Stephen Milborrow
fonte
Referência impressionante, também seria muito útil ter o número da folha ao lado da regra #
user1700890:
1
Use rpart.rules(fit, nn=TRUE)para obter os números dos nós (também conhecidos como números das folhas).
Stephen Milborrow