随机森林树生长算法

Posted

技术标签:

【中文标题】随机森林树生长算法【英文标题】:Random forest tree growing algorithm 【发布时间】:2016-07-05 00:43:15 【问题描述】:

我正在做一个随机森林实现(用于分类),我对文献中提到的树生长算法有一些疑问。

在训练决策树时,停止生长树有 2 个标准: 一种。当没有更多特征可以分割节点时停止。 湾。当节点中的所有样本属于同一类时停止。

基于此,1. 考虑在森林中种植一棵树。在拆分树的一个节点时,我随机选择 m 个全部特征中的 M 个,然后从这些m 个特征 我发现一个特征具有最大的信息增益。在我找到这个特性之后,比如说 f,我应该在继续处理节点的子节点之前从特性列表中删除这个特性吗?如果我不删除此功能,那么此功能可能会在树中再次被选中。 如果我实现算法而不删除在节点处选择的特征,那么停止生长树的唯一方法是当树的叶子变得“纯”时。当我这样做时,我在 Python 中得到了“最大递归深度”达到错误,因为树无法更早地达到那个“纯”条件。 甚至 Breiman 所写的 RF 文献都说这棵树应该长到最大。这是什么意思?

2. 在节点分裂时,在选择了要分裂的最佳特征之后(通过信息增益),分裂的阈值应该是多少?一种方法是没有阈值,为特征的每个唯一值创建一个子节点;但我也有连续值特征,这意味着每个样本创建一个子节点!

【问题讨论】:

我怀疑您是否在代码中没有错误的情况下达到了递归深度。由于树的深度应该是 log(N),那么要达到数千的深度,你就会谈论大量的样本..... 一棵深度为 20 的树是一棵相当复杂的树——它可能有多达 2**20 = 1M 个叶子:如果叶子的数量多于数据点,那么就会出现问题 @JohnGreenall 是的,可能有一些错误.. 但另一方面,如果我在下降时删除了已经为某些拆分选择的功能,那么我不会遇到这个问题;因为最终我用完了要拆分的功能。但是这方面的射频标准是什么?我应该删除功能,还是保留它们并让它们在树中重复? 功能绝对可以在树下重复 极端随机树是最流行的 RF 算法之一。你的所有问题都在论文中得到解答。拆分信息增益并为连续特征选择 N 个阈值中的最佳值。 montefiore.ulg.ac.be/~ernst/uploads/news/id63/… 【参考方案1】:

第一季度

不应从 M 中删除特征。否则它将无法检测某些类型的关系(例如:线性关系) 也许你可以早点停止,在你的情况下它可能会上升到只有 1 个样本的叶子,这将没有统计意义。所以最好停下来说,当叶子的样本数是

第二季度

对于连续特征,也许您可​​以将它们分成组并使用它们来确定分割点。

【讨论】:

以上是关于随机森林树生长算法的主要内容,如果未能解决你的问题,请参考以下文章

随机森林

分类算法 - 随机森林

决策树算法之随机森林

机器学习——“决策树&随机森林”学习笔记

随机森林原理

spark 随机森林算法案例实战