"DMatrix"中的参数"weight"在梯度提升过程(xgboost)中如何使用?

22
在xgboost中,可以为DMatrix设置参数weight。显然,这是一个权重列表,其中每个值都是相应样本的权重。 我找不到关于这些权重如何实际用于梯度提升过程的任何信息。它们与eta有关吗?
例如,如果我将所有样本的weight设置为0.3,将eta设置为1,这是否与将eta设置为0.3并将weight设置为1相同?

2
文档在这方面确实缺乏,但我已经稍微使用了一下实例权重,并找到了一些链接.. 很好的问题。 - T. Scharf
2个回答

28

xgboost允许在构建DMatrix时加入实例权重,正如您所提到的。这个权重直接与实例相关,并伴随整个训练过程进行传递。因此,它被包括在梯度和海森值的计算中,并直接影响 xgboost 模型的分裂点和训练。

可参见 这里这里

实例权重文件

XGBoost支持为每个实例提供权重以区分实例的重要性。例如,如果我们为示例中的“train.txt”文件提供实例权重文件如下:

train.txt.weight

1

0.5

0.5

1

0.5

这意味着XGBoost将在训练模型时更加强调第一和第四个实例,即正实例。该配置类似于配置组信息。如果实例文件名为“xxx”,则XGBoost将检查同一目录中是否有名为“xxx.weight”的文件,如果有,则在训练模型时使用权重。

这与 eta 非常不同

eta只是告诉xgboost在每次迭代中将最后一棵树融合到集成中的程度。它是每个迭代中集成有多贪婪的度量。

例如,如果我将weight设置为所有样本的0.3和eta

weight设置为1,这是否与将eta设置为0.3和weight设置为1相同?
所有实例的恒定weight值为1是默认值,因此将其更改为所有实例的常数0.3仍然是等权重,因此这不应太大影响。但是,将eta从0.3增加到1会使训练更加激进。

当你说“这个权重直接与实例相关,并在整个训练过程中随之移动”时,你具体是什么意思?是否有任何参考资料可以更好地理解权重对训练过程的影响? - A1010
权重必须在0和1之间吗? - lesolorzanov

1

xgboost 的 DMatrix 中,weight 是以正确的方式输入泊松分布目标(例如保险索赔频率 - 即当 'objective': 'count:poisson' 时)的 暴露变量(例如保险单持续时间)。

更多信息

那么哪些是错误的方法呢?与Stack Exchange上的回复相反,base_marginset_base_margin。我将这三个选项中的所有内容与GLM的sample_weight(由PoissonRegressorfit方法公开)进行了基准测试,并且只有weight产生了类似无偏模型(从个体特征的实际vs.预测图中可以看出)。更不用说通过切换到weight(下降到改进GLM的水平)显着改善了早期停止指标(Poisson负对数或RMSE)。


谢谢!这非常有趣!考虑到我正在使用您建议的XGB权重中的曝光,我应该如何使用权重来强调频率?我根据数据集的发生率(例如过去一年的索赔率)计算了权重。如果我使用样本权重进行曝光,您有什么想法如何使用这些权重呢?(这非常有意义)。 - Daniel Ben Zaken

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接