在 randomForest 包中绘制 500 棵树中的一棵
Posted
技术标签:
【中文标题】在 randomForest 包中绘制 500 棵树中的一棵【英文标题】:plot one of 500 trees in randomForest package 【发布时间】:2017-10-29 11:34:37 【问题描述】:如何在 R 中的同名包中的 randomForest
函数的输出中绘制树?例如,我使用 iris
数据并希望在 500 个输出树中绘制第一棵树。我的代码是
model <-randomForest(Species~.,data=iris,ntree=500)
【问题讨论】:
以下答案有帮助吗? stats.stackexchange.com/questions/41443/… @Avitus 感谢您的回答,但我无法理解。你能给我一个简单的代码来在 randomForest 函数的输出中绘制第一棵树吗? 我在下面为randomForest
包添加了一个答案;其他包,如party
-允许类似的功能
【参考方案1】:
您可以使用cforest
绘制如下图,我已将该值硬编码为 5,您可以根据您的要求进行更改。
ntree <- 5
library("party")
cf <- cforest(Species~., data=iris,controls=cforest_control(ntree=ntree))
for(i in 1:ntree)
pt <- prettytree(cf@ensemble[[i]], names(cf@data@get("input")))
nt <- new("Random Forest BinaryTree")
nt@tree <- pt
nt@data <- cf@data
nt@responses <- cf@responses
pdf(file=paste0("filex",i,".pdf"))
plot(nt, type="simple")
dev.off()
cforest
是随机森林的另一种实现,不能说哪个更好,但总的来说我们可以看到的差异很少。不同之处在于cforest
使用条件推断,与randomForest
包相比,我们将更多权重放在终端节点上,而randomForest
包的实现为终端节点提供了相等的权重。
一般cofrest
使用加权平均值,randomForest
使用正常平均值。您可能需要检查this。
【讨论】:
感谢您的回答。我想用randomForest
,我可以用cforest
代替randomForest
吗?【参考方案2】:
可以使用randomForest
包中的getTree()
函数(官方指南:https://cran.r-project.org/web/packages/randomForest/randomForest.pdf)
在iris
数据集上:
require(randomForest)
data(iris)
## we have a look at the k-th tree in the forest
k <- 10
getTree(randomForest(iris[, -5], iris[, 5], ntree = 10), k, labelVar = TRUE)
【讨论】:
如何绘制这棵树?请在上面的代码中添加绘图代码。谢谢 @Amin 上面的代码为您提供了选定的树 (k <- 10
)。如果您想将其可视化,则需要更多的努力(我不知道randomForest
中有任何直接绘图功能)。请看看这个shiring.github.io/machine_learning/2017/03/16/rf_plot_ggraph以上是关于在 randomForest 包中绘制 500 棵树中的一棵的主要内容,如果未能解决你的问题,请参考以下文章
在 R 的 randomForest 包中,因子是不是必须明确标记为因子?
并行化 rfcv() 函数以在 randomForest 包中进行特征选择
R 中 h2o 包中的 predict.H2OModel() 是不是为 h2o.randomForest() 模型提供 OOB 预测?