将随机森林变成决策树 - 在 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 包的主要内容,如果未能解决你的问题,请参考以下文章