R中randomForest包中的getTree函数显示随机森林中使用的特定树的结构。

这是虹膜数据集上的示例

library(randomForest)
data(iris)
rf <- randomForest(Species ~ ., iris)
getTree(rf, 1)


这显示了500号树1的输出:

   left daughter right daughter split var split point status prediction
1              2              3         3        2.50      1          0
2              0              0         0        0.00     -1          1
3              4              5         4        1.65      1          0
4              6              7         4        1.35      1          0
5              8              9         3        4.85      1          0
6              0              0         0        0.00     -1          2
7             10             11         2        3.10      1          0
8             12             13         4        1.55      1          0
9              0              0         0        0.00     -1          3
10             0              0         0        0.00     -1          3
11             0              0         0        0.00     -1          2
12            14             15         2        2.55      1          0
13             0              0         0        0.00     -1          2
14            16             17         2        2.35      1          0
15             0              0         0        0.00     -1          3
16             0              0         0        0.00     -1          3
17             0              0         0        0.00     -1          2


现在我的主要目的是找到从节点1到终端节点的路径(在这种情况下为2,6,9,10等)

我可以使用通用的算法或代码吗?

9的路径将是1-> 3-> 5-> 9
10的路径将是1-> 3-> 6-> 10

任何帮助都感激不尽。

最佳答案

您可以通过递归来实现这一点-类似于:

library(randomForest)
data(iris)
set.seed(123) # for reproducibility
rf <- randomForest(Species ~ ., iris)

some_tree <- getTree(rf, 1)

some_tree

get_path_to_node <- function(tree, child){
  parent <- which(tree[,'left daughter']==child | tree[,'right daughter']==child)
  if( parent==1 ) return(paste(parent, child,   sep='->'))
  return( paste(get_path_to_node(tree, child=parent), child, sep='->' ) )
}

get_path_to_node(some_tree, 5)


给你1->3->5

说明:我们从节点j开始。通过找出left daughter等于jright daughter等于j的哪一行,我们可以找出其“父级”是什么。然后我们对其父级重复该过程,依此类推,直到发现父级为1,根据定义,父级为根。我们将pastesep='->'一起使用以构建链。

关于r - 如何在R中的randomForest中找到从根到叶的getTree函数从根到叶的路径?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35096591/

10-12 20:33