r - 如何绘制 OOB 错误与随机森林中的树数
问题描述
我拟合了一个随机森林模型。我已经使用了两者randomForest
和ranger
包。我没有调整森林中的树木数量,我只是将其保留为默认数量,即 500。现在我想看看它是否足够,即错误是否达到了稳定水平。所以我相信我需要提取单个树,随机取例如 100、200、300、400 和最后 500 棵树,从中取出 oob 树并计算 100、200、...树的 OOB 错误连续. 然后我可以绘制 OOB 错误与树的数量。我发现randomForest::getTree
并ranger::treeInfo
返回了一个 data.frame 的树,但我不知道那里是什么。更重要的是ranger::treeInfo
返回一个具有 50% NAs 的数据帧,并且整体输出更难阅读。所以我的问题是:
- 如果我已经有一个包含 500 棵树的随机森林,我如何绘制 OOB 错误与森林中使用的树木数量?
- 为什么
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)
解决方案
我认为您正在寻找的只是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
and 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
这基本上是这样的描述:
推荐阅读
- java - 使用相同 Keycloak (SSO) 认证 2 个 APP
- r - 将稳定包与以前版本的 R 匹配?
- navigation - Mapbox Navigation 正在避开道路
- azure-functions - 使用 Azure 函数,是否可以同时处理单个 CosmosDB 更改源?
- php - PHP合并2个数组类似于SQL INNER JOIN
- python - 使用 Python 将整个数组作为一个元素附加到另一个数组中,该数组内部具有不同大小的数组
- go - 如果代理正在转发,Golang 中的 AutoCert 可以使用自定义端口吗?
- python - 需要 Future 或协程 - asyncio
- java - 如何使用 JGit 获取标签之间的提交列表?
- functional-programming - “分裂”属于哪一类?