将随机森林变成决策树 - 在 R 中使用 randomForest 包

Posted

技术标签:

【中文标题】将随机森林变成决策树 - 在 R 中使用 randomForest 包【英文标题】:Turning a Random Forest into a Decision Tree - Using randomForest package in R 【发布时间】:2014-06-14 23:48:48 【问题描述】:

是否可以生成树完全相同的决策森林?请注意,这是一个实验性问题。据我了解,与单个决策树相比,随机森林有两个导致“随机性”的参数:

1) 在决策树的每个节点上随机采样的特征数,以及

2) 为创建树而绘制的训练示例数。

直观地说,如果我将这两个参数设置为它们的最大值,那么我应该避免“随机性”,因此每个创建的树应该完全相同。因为所有的树都完全相同,所以无论森林中的树木数量或不同的运行(即不同的种子值),我都应该获得相同的结果。

我已经使用 R 中的 randomForest 库测试了这个想法。我认为上述两个参数分别对应于“mtry”和“sampsize”。我已将这些值设置为最大值,但不幸的是仍然存在一些随机性,因为 OOB 错误估计值取决于森林中树木的数量?!

您能否帮助我了解如何消除随机决策森林中的所有随机性,最好使用 R 中 randomForest 库的参数?

【问题讨论】:

我为'sampsize'设置了最大值,并检查不同树的根节点的分割点(使用函数'getTree')。不知何故,相同变量的不同树上的分割点不同。直觉上,同一个变量的分割点应该和我用过的所有可用数据是一样的吧?!请帮助我了解这种随机性来自哪里!? 【参考方案1】:

除了 mtry 和 sampsize,randomForest() 中还有一个相关的参数:replace。默认情况下,用于生长每棵树的数据点采样是通过替换完成的。如果要在所有树中使用所有数据点,不仅需要将 sampsize 设置为数据点的数量,还需要设置 replace=FALSE。

这是一个玩具示例,表明您可以获得相同树木的森林:

图书馆(随机森林)

set.seed(17)

x

y

rf1

然后您可以使用 getTree(rf1, 1) 等来检查所有树是否相同。

【讨论】:

以上是关于将随机森林变成决策树 - 在 R 中使用 randomForest 包的主要内容,如果未能解决你的问题,请参考以下文章

如何生产 XG 提升 / 决策树 / 随机森林模型

如何使用 R 在随机森林中生成决策树图和变量重要性图?

R语言︱决策树族——随机森林算法

Tidymodel 包:R 中的通用线性模型 (glm) 和决策树(袋装树、提升树和随机森林)模型

R语言 随机森林算法

R语言基于树的方法:决策树,随机森林,套袋Bagging,增强树