【问题标题】:What is XGBoost pruning step doing?XGBoost 修剪步骤在做什么?
【发布时间】:2019-03-11 08:16:39
【问题描述】:

当我使用 XGBoost 拟合模型时,它通常会显示一个消息列表,例如“updater_prune.cc:74:树修剪结束,1 个根,6 个额外节点,0 个修剪节点,max_depth=5”。我想知道 XGBoost 是如何进行树修剪的?我找不到关于他们修剪过程的描述in their paper

注意:我确实了解决策树修剪过程,例如预剪枝和后剪枝。这里我很好奇XGBoost的实际剪枝过程。通常剪枝需要验证数据,但即使我没有提供任何验证数据,XGBoost 也会执行剪枝。

【问题讨论】:

    标签: decision-tree xgboost pruning


    【解决方案1】:

    XGBoost 首先将所有树长到max_depth

    这允许快速训练,因为您不必评估每个节点的所有正则化参数。

    每棵树长到max_depth之后,你从树的底部(递归一直到顶部)并确定根据您选择的超参数,拆分和子代是有效的。如果拆分或节点无效,则将它们从树中删除。

    XGBoost 模型的model dump 中,您可以观察到在训练期间实际深度将小于max_depth如果发生了修剪。

    修剪不需要验证数据。它只是根据hyper-parameters you have set 在训练。

    【讨论】:

    • 从您回答中的幻灯片来看,我认为您基本上是对的。但是,我觉得正确的答案(如幻灯片中所示)是修剪掉由于正则化而分裂导致负增益的节点,而不是“无效节点”。你认为如果一个节点已经有比它的超参数值小的样本数,它仍然会被分裂直到达到 max_depth 吗?
    • 是的,树总是先长到最大深度,然后再修剪。正如您所指出的,您可以在训练期间从带有详细标志的 cmets 中观察到这一点。
    猜你喜欢
    • 2011-03-24
    • 2020-05-31
    • 2015-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 2016-07-05
    相关资源
    最近更新 更多