gpt4 book ai didi

python - 如何访问 xgboost 中单个决策树的权重?

转载 作者:太空狗 更新时间:2023-10-29 17:27:43 29 4
gpt4 key购买 nike

我正在使用 xgboost 进行排名

param = {'objective':'rank:pairwise', 'booster':'gbtree'}

据我所知,梯度提升是通过计算学习决策树的加权和来工作的。我如何访问分配给每个学习助推器的权重?我想尝试在训练后对权重进行后处理以加快预测步骤,但我不知道如何获得各个权重。使用 dump_model() 时,可以在创建的文件中看到不同的决策树,但其中没有存储权重。在 API 中我还没有找到合适的函数。或者我可以使用收缩参数 eta 手动计算权重吗?

最佳答案

每棵树都被赋予了相同的权重eta,总体预测是每棵树预测的总和,如您所说。

您可能希望较早的树比后面的树获得更多的权重,但由于在每棵树之后更新响应的方式,这不是必需的。这是一个玩具示例:

假设我们有 5 个观察值,响应分别为 10、20、30、40、50。构建第一棵树并给出 12、18、27、39、54 的预测。

现在,如果 eta = 1,则传递给下一棵树的响应变量将为 -2、2、3、1、-4(即预测与真实响应之间的差异) .然后,下一棵树将尝试学习第一棵树未捕获的“噪音”。如果 nrounds = 2,则两棵树的预测之和将给出模型的最终预测。

如果 eta = 0.1,则所有树的预测都会按 eta 缩小,因此第一棵树将改为“预测”1.2、1.8、2.7、3.9 , 5.4.传递给下一棵树的响应变量将具有值 8.8、18.2、27.3、36.1、44.6(缩放预测与真实响应之间的差异)然后第二轮使用这些响应值构建另一棵树 - 并再次预测由 eta 缩放。所以树 2 预测 7、18、25、40、40,一旦缩放,就会变成 0.7、1.8、2.5、4.0、4.0。和以前一样,第三棵树将传递这些值与前一棵树的响应变量之间的差异(因此 8.1、16.4、24.8、32.1、40.6)。同样,所有树的预测总和将给出最终预测。

显然,当 eta = 0.1 且 base_score 为 0 时,您需要至少 10 轮才能获得接近合理的预测。通常,您至少需要 1/eta 回合,通常更多。

使用小 eta 的基本原理是模型受益于朝着预测迈出小步,而不是让树 1 完成大部分工作。这有点像结晶——慢慢冷却,你会得到更大、更好的晶体。缺点是您需要增加 nrounds,从而增加算法的运行时间。

关于python - 如何访问 xgboost 中单个决策树的权重?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32950607/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com