我安装了一个随机森林模型。我同时使用了randomForest
和ranger
软件包。我没有调整森林中的树木数量,我只给它保留了默认数量,即500。现在我想看看是否足够,即错误是否已经达到平稳状态。因此,我认为我需要提取单个树,随机抽取例如100、200、300、400,最后是500棵树,从中抽取oob树,并连续计算100、200,...树的OOB误差。然后,我可以绘制OOB误差与树数的关系图。我发现randomForest::getTree
和ranger::treeInfo
返回了一个data.frame的树,但是我不知道那里是什么。更重要的是,ranger::treeInfo
返回一个具有50%NA的数据帧,并且整体输出甚至更难以读取。
所以我的问题是:
ranger::treeInfo
拥有50%的NA,而实际上只有那些行具有预测? 这是最小的示例:
mpg2 <- mpg %>%
mutate(is_suv = as.factor(class == 'suv')) %>%
select(-class)
mpg_model <- ranger::ranger(is_suv ~ ., data = mpg2)
ranger::treeInfo(mpg_model, tree = 100)
答案 0 :(得分:1)
我认为您正在寻找的只是plot(.)
,如本例所示:
library(randomForest)
set.seed(71)
iris.rf <- randomForest(Species ~ ., data=iris, importance = TRUE, proximity=TRUE)
# plot the model
plot(iris.rf)
# add legend to know which is which
legend("top", colnames(iris.rf$err.rate), fill=1:ncol(iris.rf$err.rate))
对于randomForest::getTree
和ranger::treeInfo
,它们与OOB无关,它们只是描述了-chosen-tree的轮廓,即哪个节点在哪个节点上划分了标准,并且连接了哪些节点,每个程序包使用的表示形式略有不同,例如以下示例来自ranger::treeInfo
:
nodeID leftChild rightChild splitvarID splitvarName splitval terminal prediction
1 0 1 2 4 Petal.Width 0.80 FALSE <NA>
2 1 NA NA NA <NA> NA TRUE setosa
基本上是对以下内容的描述: