Как считать узлы в дереве в R - PullRequest
0 голосов
/ 08 ноября 2018

Я начинаю изучать ML с R. Я делаю следующие операции с RStudio:

iris=datasets::iris
tree(Species~., iris)

И я получаю:

 1) root 150 329.600 setosa ( 0.33333 0.33333 0.33333 )  
   2) Petal.Length < 2.45 50   0.000 setosa ( 1.00000 0.00000 0.00000 ) *
   3) Petal.Length > 2.45 100 138.600 versicolor ( 0.00000 0.50000 0.50000 )  
     6) Petal.Width < 1.75 54  33.320 versicolor ( 0.00000 0.90741 0.09259 )  
      12) Petal.Length < 4.95 48   9.721 versicolor ( 0.00000 0.97917 0.02083 )  
        24) Sepal.Length < 5.15 5   5.004 versicolor ( 0.00000 0.80000 0.20000 ) *
        25) Sepal.Length > 5.15 43   0.000 versicolor ( 0.00000 1.00000 0.00000 ) *
      13) Petal.Length > 4.95 6   7.638 virginica ( 0.00000 0.33333 0.66667 ) *
     7) Petal.Width > 1.75 46   9.635 virginica ( 0.00000 0.02174 0.97826 )  
      14) Petal.Length < 4.95 6   5.407 virginica ( 0.00000 0.16667 0.83333 ) *
      15) Petal.Length > 4.95 40   0.000 virginica ( 0.00000 0.00000 1.00000 ) *

Мои вопросы:

  1. как я могу получить максимальную глубину узла дерева?
  2. как узнать количество узлов?

Я использую пакеты tree и datasets.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018
tree:::tree.depth(as.integer(row.names(iris_tree$frame)))
## [1] 0 1 1 2 3 4 4 3 2 3 3

принимает max() этого для глубины (+1, если не 0-индексирование глубины) и length() этого для # узлов.

Это то, что делает пакет внутренне

0 голосов
/ 08 ноября 2018

Относительно вашего второго вопроса вы можете сделать:

library(tree)

# build your tree
m = tree(Species~., iris)

# count how many times you have <leaf> in the models dataframe
sum(m$frame$var == "<leaf>")

# [1] 6

# count terminal nodes
length(unique(m$where))

# [1] 6

# count nodes
nrow(m$frame)

# [1] 11
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...