J
Friedman 提出的梯度树提升使用具有终端节点(=叶子)的决策树作为基础学习器。有多种方法可以生成具有精确J
节点的树,例如可以以深度优先方式或广度优先方式生长树,...
是否有一种既定的方法来种植具有完全J
终端节点的树以进行梯度树提升?
我检查了 R 包的树生长过程,gbm
它似乎以深度优先的方式扩展树,并使用基于错误改进的启发式方法来选择是扩展左子节点还是右子节点——对吗?
J
Friedman 提出的梯度树提升使用具有终端节点(=叶子)的决策树作为基础学习器。有多种方法可以生成具有精确J
节点的树,例如可以以深度优先方式或广度优先方式生长树,...
是否有一种既定的方法来种植具有完全J
终端节点的树以进行梯度树提升?
我检查了 R 包的树生长过程,gbm
它似乎以深度优先的方式扩展树,并使用基于错误改进的启发式方法来选择是扩展左子节点还是右子节点——对吗?
R中的解决方案gbm
不是典型的解决方案。
当叶子的数量受到限制时,其他包,喜欢scikit-learn
或LightGBM
使用所谓的(在 scikit-learn 中) 。BestFirstTreeBuilder
它支持所有叶子的优先级队列,并且在每次迭代时拆分叶子,从而带来最佳的杂质减少。所以它既不是深度优先也不是广度优先,而是第三种算法,基于叶子中的计算。
从某种意义上说,这种方法比盲目地依次拆分所有叶子更优化。但是,它仍然是一个贪婪的启发式,因为选择是否拆分'th 节点现在只依赖于而不是可能的连续分裂可能比当前分裂更能减少杂质。