“热启动”XGBoost 是什么意思?

数据挖掘 xgboost
2021-10-09 07:34:34

在我目前正在进行的项目中(预测是否有人会点击我发送的邮件列表中的某个项目),每天都会提取有关用户的数据并从头开始学习模型。由于昨天的用户与今天的用户并没有太大区别,我决定尝试以某种方式使用旧模型。

对于 Deep Net 和 SVM 模型,这很容易——我只是让算法从上次获得的权重开始,并使用梯度下降使它们在新数据集上工作。

那么 XGBoost 呢?我看到我有两个选项可以使用以前的数据:

  1. 使用旧模型进行预测并将其作为参数提供给新模型

  2. 使用旧的助推器

第一个看起来会让新模型过于关注旧结果,而第二个也感觉有点奇怪:我建立了 1000 棵树,现在我用新数据增强它们 - 所以看起来我会结束主要是忽略旧数据,只是重建森林以匹配新数据。

我的第一个想法是简单地使用旧模型中的一半树和新模型中的一半。这样我仍然会使用旧知识,但会用新数据来平衡它。一段时间后,我会得到一个有趣的金字塔形森林,其中“老”树很少,“年轻”树很多(另一种思考方式就像一个幂级数模型,其中给出了时期 t-1 的数据t 时期的数据重要性的一半)。这个想法看起来很巧妙,但我还没有看到有人在任何地方这样做,所以我仍然持怀疑态度。

有没有我错过的选项?我将不胜感激对我上面概述的可能性的评论以及处理这个问题的新想法。

1个回答

为什么不继续训练你的旧模型呢?只需将先前的 xgb 模型(路径 + 文件名)作为参数传递给 train 函数。

bst = xgb.train(param0, dtrain, num_round, evals=[(dtrain, "training")], xgb_model=prev_xgb_model)

xgb_model=prev_xgb_model