【发布时间】:2020-01-09 06:04:54
【问题描述】:
当我使用 lightgbm 训练分类模型时,我通常使用验证集和提前停止来确定迭代次数。
现在我想结合训练和验证集来训练一个模型(所以我有更多的训练示例),并使用该模型来预测测试数据,我应该更改验证过程得出的迭代次数吗?
谢谢!
【问题讨论】:
当我使用 lightgbm 训练分类模型时,我通常使用验证集和提前停止来确定迭代次数。
现在我想结合训练和验证集来训练一个模型(所以我有更多的训练示例),并使用该模型来预测测试数据,我应该更改验证过程得出的迭代次数吗?
谢谢!
【问题讨论】:
正如您在评论中所说,这与深度学习的时期数无法比较,因为深度学习通常是随机的。
使用 LGBM,所有参数和特征都相同,通过增加 10% 到 15% 的训练点,我们可以预期树看起来很相似:随着信息越多,分割值会更好,但这不太可能彻底改变您的模型(如果您使用 bagging_fraction 之类的参数,或者添加的点来自不同的分布,则不太正确)。
我看到人们将迭代次数乘以 1.1(抱歉找不到我的来源)。
直观地说,添加一些树是有意义的,因为您可能会添加信息。实验上,这个值效果很好,但最佳值将取决于您的模型和数据。
【讨论】:
在使用 Keras 进行深度学习的类似问题中:我通过使用早期停止器并与训练和验证数据进行交叉验证来做到这一点,并让模型在训练期间使用验证数据进行自我优化。
每次训练后,我都会使用测试数据测试模型并检查平均准确度。同时,每次训练后,我都会从EarlyStopper 中保存stopped_epoch。如果 CV 分数令人满意,我会取停止 epoch 的平均值,并使用平均停止 epoch 的数量进行全面训练(包括我拥有的所有数据),然后保存模型。
【讨论】:
我不知道进行此类估算的成熟经验法则。正如弗洛里安所指出的,有时人们会重新调整从提前停止获得的迭代次数一个因子。如果我没记错的话,通常该因子假设数据大小和最佳树数呈线性相关。 IE。在 10 倍 cv 中,这将是一个重新缩放的 1.1 因子。但这并没有确凿的理由。正如 Florian 还指出的那样,对最优值的依赖通常相当平坦,因此 +- 一点树不会产生显着的效果。
两个建议:
【讨论】: