Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 对于lightgbm的迭代次数和训练大小之间的关系,是否有经验法则?_Python_Lightgbm - Fatal编程技术网

Python 对于lightgbm的迭代次数和训练大小之间的关系,是否有经验法则?

Python 对于lightgbm的迭代次数和训练大小之间的关系,是否有经验法则?,python,lightgbm,Python,Lightgbm,当我使用lightgbm训练分类模型时,我通常使用验证集和提前停止来确定迭代次数 现在我想结合训练集和验证集来训练一个模型(因此我有更多的训练示例),并使用该模型来预测测试数据,我是否应该更改从验证过程中得到的迭代次数 谢谢 在Keras深度学习中的一个类似问题中:我通过使用早期停止器和交叉验证训练和验证数据来实现,并在训练期间使用验证数据让模型自我优化 每次训练后,我用测试数据测试模型,并检查平均精度。在每次训练后的平均时间内,我从EarlyStopper保存stopped\u epoch。如

当我使用lightgbm训练分类模型时,我通常使用验证集和提前停止来确定迭代次数

现在我想结合训练集和验证集来训练一个模型(因此我有更多的训练示例),并使用该模型来预测测试数据,我是否应该更改从验证过程中得到的迭代次数


谢谢

在Keras深度学习中的一个类似问题中:我通过使用早期停止器和交叉验证训练和验证数据来实现,并在训练期间使用验证数据让模型自我优化


每次训练后,我用测试数据测试模型,并检查平均精度。在每次训练后的平均时间内,我从
EarlyStopper
保存
stopped\u epoch
。如果CV分数令人满意,我会取停止历次的平均值,对平均停止历次的次数进行完整的训练(包括我所有的数据),然后保存模型。

正如您在评论中所说,这与深度学习历次的次数不可比,因为深度学习通常是随机的

使用LGBM,所有参数和功能都相等,通过增加10%到15%的训练点,我们可以期望树看起来相似:随着信息的增多,分割值会更好,但不太可能彻底改变模型(如果您使用参数,如
装袋率
,或者如果添加的点来自不同的分布,则情况就不太一样了)


我看到人们将迭代次数乘以1.1(找不到我的源代码抱歉).
直观地说,在可能添加信息时添加一些树是有意义的。从实验上看,该值效果很好,但最佳值取决于您的模型和数据。

我不知道有一个成熟的经验法则来进行这种估计。正如Florian指出的,有时人们会重新调整迭代次数通过一个因子从早期停止中获得。如果我没记错的话,通常该因子假设数据大小和最佳树数之间存在线性依赖关系。即,在10倍cv中,这将是一个重缩放1.1因子。但没有确凿的理由证明这一点。正如Florian还指出的那样,围绕最佳树数的依赖关系通常是重缩放的一点树木不会产生戏剧性的效果

两项建议:

  • 进行k倍验证,而不是单序列验证分割。这将允许评估最佳树数的估计值的稳定性。如果在两倍之间波动很大,则不要依赖此类估计值:)
  • 确定验证样本的大小,并使用逐渐增加的训练集提前停止训练模型。这将允许评估树木数量对样本大小的依赖性,并将其近似为完整样本大小

谢谢你的回答,但我觉得有点不同。深度学习中的纪元数意味着将数据输入到训练算法中的次数。GBDT中的迭代次数决定您使用的树的数量,更多的树往往会过度拟合。