当我使用XGBoost来拟合一个模型时,它通常会显示一个消息列表,如"updater_prune.cc:74:树剪枝结束,1个根,6个额外节点,0剪枝节点,max_depth=5“。我想知道XGBoost是如何进行树修剪的?我找不到关于他们剪枝过程在他们的论文里的描述。
注:我理解决策树剪枝过程,例如剪枝前和剪枝后。在这里,我对XGBoost的实际剪枝过程感到好奇。通常,剪枝需要一个验证数据,但是即使我没有提供任何验证数据,XGBoost也会执行剪枝。
发布于 2018-10-05 20:45:47
XGBoost 把所有的树都种在 max_depth .上。
这允许快速训练,因为您不必评估每个节点的所有正则化参数。
在每棵树增长到max_depth之后,您从树的底部走(递归地一直走到树的顶部),并根据所选的超参数确定拆分和子树是否是有效的。如果拆分或节点无效,则从树中删除它们。
在model dump的XGBoost模型中,如果发生剪枝,您可以观察到在训练期间实际深度将小于max_depth。
剪枝不需要验证数据。它只是提出一个简单的问题,即在培训期间,基于的,拆分节点或由此产生的子节点是否是你设置的超参数有效的。
https://stackoverflow.com/questions/52672116
复制相似问题