Построение модели дерева решений rpart с представлением солнечных лучей

Я нашел способ построить решение дерева решений из rpart с пакетом sunburstR. Для построения солнечных лучей необходимо иметь data.frame, представляющий последовательность. Я изменил результат дерева решений на последовательность, как показано ниже.

Результат дерева решений

rpart(Species~.,data=iris)

n= 150 

node), split, n, loss, yval, (yprob)
      * denotes terminal node

1) root 150 100 setosa (0.33333333 0.33333333 0.33333333)  
  2) Petal.Length< 2.45 50   0 setosa (1.00000000 0.00000000 0.00000000) *
  3) Petal.Length>=2.45 100  50 versicolor (0.00000000 0.50000000 0.50000000)  
    6) Petal.Width< 1.75 54   5 versicolor (0.00000000 0.90740741 0.09259259) *
    7) Petal.Width>=1.75 46   1 virginica (0.00000000 0.02173913 0.97826087) * 

Последовательность для солнечных лучей:

sequences_1<-1
sequences_1<-data.frame(sequences_1)
sequences_1[1:3,]<-1
sequences_1$V1[1]<-"Petal.Length<_2.45-setosa"
sequences_1$V1[2]<-"Petal.Length>=2.45-Petal.Width<_1.75_54_5-versicolor"
sequences_1$V1[3]<-"Petal.Length>=2.45-Petal.Width>=1.75_46_1-virginica"
sequences_1$V2[1]<-50
sequences_1$V2[2]<-54
sequences_1$V2[3]<-46
sequences_1$sequences_1<-NULL

Построение солнечных лучей:

library(sunburstR)
sunburst(sequences_1,count=TRUE)

Последовательность для сюжета солнечных лучей я сделал вручную. Кто-нибудь знает, как автоматически построить последовательность, как указано выше, из результата дерева решений rpart?


person hkn    schedule 11.09.2018    source источник


Ответы (1)


d3r предоставляет функцию d3_party для преобразования rpart/partykit в иерархию d3. sunburst может использовать результат d3_party с одной незначительной модификацией, чтобы изменить "rule" на "name". Это не идеально, но в большинстве случаев будет работать безупречно.

library(rpart)
library(d3r)
# d3_party requires partykit
# install.packages("partykit")
library(sunburstR)

rp <- rpart(Species~.,data=iris)
rp_d3 <- d3_party(rp)

# one trick/hack required since sunburst expects
#   name but d3_party gives rule
#   this is ugly but let's replace all "rule" with "name"
#   with gsub
rp_d3 <- gsub(
  x = rp_d3,
  pattern = '"rule":',
  replacement = '"name":'
)

sunburst(
  rp_d3,
  valueField = "n",
  sumNodes = FALSE,
  count = TRUE,
  legend = FALSE
)
person timelyportfolio    schedule 07.10.2018