Organizujesz drzewo klasyfikacyjne (w części) w zbiór reguł?

11

Czy istnieje sposób, aby po zbudowaniu złożonego drzewa klasyfikacji za pomocą rpart (w R) zorganizować reguły decyzyjne dla każdej klasy? Więc zamiast uzyskać jedno wielkie drzewo, otrzymujemy zestaw reguł dla każdej z klas?

(Jeśli tak to jak?)

Oto prosty przykład kodu, który pokazuje przykłady:

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

Dzięki.

Tal Galili
źródło

Odpowiedzi:

9

Taka funkcjonalność (lub bliska) wydaje się być dostępna w pakiecie grzechotki , jak opisano w RJournal 1/2 2009 (s. 50), chociaż sprawdziłem ją tylko z wiersza poleceń.

Na przykład daje następujące wyniki:

 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

Aby uzyskać ten wynik, rattle/R/rpart.Rźródłowy plik źródłowy (z pakietu źródłowego) znajduję w moim obszarze roboczym, po usunięciu dwóch wywołań funkcji Rtxt()w asRules.rpart()funkcji (możesz ją również zastąpić print). Potem piszę

> asRules(fit)
chl
źródło
Czy można również drukować reguły dla nieterminowych urlopów?
user1700890,
3

Rpart.plot pakiet w wersji 3.0 (lipiec 2018) posiada funkcję rpart.rulesgenerowania zestawu reguł dla drzewa. Na przykład

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

daje

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

Więcej przykładów znajduje się w rozdziale 4 winiety rpart.plot .

Stephen Milborrow
źródło
Niesamowite odniesienie, bardzo pomocne byłoby również umieszczenie numeru liścia obok reguły
użytkownik1700890
1
Użyj, rpart.rules(fit, nn=TRUE)aby uzyskać numery węzłów (inaczej numery liści).
Stephen Milborrow,