Organiser un arbre de classification (en partie) en un ensemble de règles?

11

Existe-t-il un moyen, une fois qu'un arbre de classification complexe est construit à l'aide de rpart (dans R), d'organiser les règles de décision produites pour chaque classe? Donc, au lieu d'obtenir un énorme arbre, nous obtenons un ensemble de règles pour chacune des classes?

(si c'est le cas, comment?)

Voici un exemple de code simple pour afficher des exemples:

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

Merci.

Tal Galili
la source

Réponses:

9

Une telle fonctionnalité (ou proche) semble être disponible dans le paquet hochet , comme décrit dans RJournal 1/2 2009 (p. 50), bien que je ne l'ai vérifié qu'à partir de la ligne de commande.

Pour votre exemple, il donne la sortie suivante:

 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

Pour obtenir cette sortie, je source le rattle/R/rpart.Rfichier source (à partir du package source) dans mon espace de travail, après avoir supprimé les deux appels à Rtxt()dans la asRules.rpart()fonction (vous pouvez également le remplacer par print). Ensuite, je tape juste

> asRules(fit)
chl
la source
Est-il également possible d'imprimer des règles pour les feuilles non terminales?
user1700890
3

Le package rpart.plot version 3.0 (juillet 2018) a une fonction rpart.rulespour générer un ensemble de règles pour une arborescence. Par exemple

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

donne

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

Pour plus d'exemples, voir le chapitre 4 de la vignette rpart.plot .

Stephen Milborrow
la source
Référence géniale, il serait également très utile d'avoir le numéro de feuille à côté de la règle
user1700890
1
Utilisez rpart.rules(fit, nn=TRUE)pour obtenir les numéros de noeud (alias les numéros de feuille).
Stephen Milborrow