R中的xgboost:xgb.cv的early_stopping_rounds的公差是多少?

问题描述

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”,则停止训练过程并返回最终模型。

early stopping graph

保持合理的“k”值的另一个原因是通过测试几次进一步运行来避免局部最小值。

你提到的tolerance,可能是指每轮的gradient boosting过程,xgboost的website上已经简单讨论过了。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...