在randomForest包中绘制500棵树中的一棵

时间:2017-05-29 08:20:20

标签: r machine-learning classification random-forest

如何在randomForest的输出中绘制树在R中的相同名称包中的功能?例如,我使用iris数据,并希望在500输出发束中绘制第一棵树。我的代码是

model <-randomForest(Species~.,data=iris,ntree=500)

2 个答案:

答案 0 :(得分:1)

您可以使用getTree()包中的randomForest功能(官方指南: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)

答案 1 :(得分:0)

您可以使用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包相比,我们将更多权重放在终端节点上,其中实现为终端节点提供相同的权重。

一般来说,cofrest使用加权平均值,randomForest使用正常平均值。您可以查看this