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
等于j
或right daughter
等于j
的哪一行,我们可以找出其“父级”是什么。然后我们对其父级重复该过程,依此类推,直到发现父级为1,根据定义,父级为根。我们将paste
与sep='->'
一起使用以构建链。关于r - 如何在R中的randomForest中找到从根到叶的getTree函数从根到叶的路径?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35096591/