当我使用 XGBoost 拟合模型时,它通常会显示一个消息列表,例如“updater_prune.cc:74:树修剪结束,1 个根,6 个额外节点,0 个修剪节点,max_depth=5”。我想知道 XGBoost 是如何进行树修剪的?我在他们的论文中找不到关于他们修剪过程的描述。
注意:我确实了解决策树修剪过程,例如预修剪和后修剪。这里我很好奇XGBoost的实际剪枝过程。通常剪枝需要验证数据,但即使我没有给它任何验证数据,XGBoost 也会执行剪枝。
当我使用 XGBoost 拟合模型时,它通常会显示一个消息列表,例如“updater_prune.cc:74:树修剪结束,1 个根,6 个额外节点,0 个修剪节点,max_depth=5”。我想知道 XGBoost 是如何进行树修剪的?我在他们的论文中找不到关于他们修剪过程的描述。
注意:我确实了解决策树修剪过程,例如预修剪和后修剪。这里我很好奇XGBoost的实际剪枝过程。通常剪枝需要验证数据,但即使我没有给它任何验证数据,XGBoost 也会执行剪枝。
XGBoost
把所有的树都长到max_depth
第一。
这允许快速训练,因为您不必评估每个节点的所有正则化参数。
在每棵树长到之后max_depth
,您从树的底部(递归地一直到顶部)并根据您选择的超参数确定拆分和子节点是否有效。如果拆分或节点无效,则将它们从树中删除。
在模型中,如果发生修剪,model dump
您XGBoost
可以观察到实际深度将小于max_depth
训练期间的深度。
修剪不需要验证数据。 它只是根据您在训练期间设置的超参数提出一个简单的问题,即拆分或生成的子节点是否有效。