问题描述
在xgb.cv
函数中(来自库xgboost
),选项之一是early_stopping_rounds
。此选项的描述为:
If NULL,the early stopping function is not triggered. If set to an integer k,training with a validation set will stop if the performance doesn't improve for k rounds. Setting this parameter engages the cb.early.stop callback.
“如果在k
个回合中性能没有改善,这到底是什么意思?是否为此设置了公差级别tol
?也就是说,如果连续两个回合之间的性能指标差异在tol
个回合中为k个?我想知道xgb.cv
的公差等级是什么,但是在文档的任何地方都找不到。
否则,这是否意味着如果k
回合中它继续减少?
解决方法
此处的“性能”是指您选择的训练结果准确性的衡量标准。可能是均方误差等。
这里以均方误差为例。 xgb.cv 使用交叉验证方法训练模型。它通常将数据分成一些相等的折叠(默认为 5),然后使用其中的 4 个训练模型并验证其余的模型。重复这个过程 5 次,每次使用不同的折叠组合,其余的用于验证。性能是5个验证数据的均方误差的平均值。
Xgb 训练过程需要多轮才能获得更好的结果。但是他怎么知道什么时候停止训练过程以避免过拟合(预测能力)并达到最低的错误率(准确率)呢?这就是提前停止方法的用武之地。
这个过程是这样的:在本轮训练模型并计算训练和验证误差。如果验证错误高于之前运行(轮)中的最低验证错误率,则计算该最低验证轮的轮数。如果计数高于预设的“k”,则停止训练过程并返回最终模型。
保持合理的“k”值的另一个原因是通过测试几次进一步运行来避免局部最小值。
你提到的tolerance,可能是指每轮的gradient boosting过程,xgboost的website上已经简单讨论过了。