【问题标题】:when does xgboost cross validation stopxgboost 交叉验证何时停止
【发布时间】:2017-06-30 10:00:59
【问题描述】:
param = {'max_depth': 2, 'eta': 1, 'silent': 0, 'objective': 
         'multi:softmax', 'num_class': 10}
num_round = 1
res = xgb.cv(param, dtrain, num_round, nfold=10,
           metrics={'merror'}, seed=0, verbose_eval=True,
           callbacks=[xgb.callback.print_evaluation(show_stdv=True),
                      xgb.callback.early_stop(3)])

我可以看到很多以下日志:

[17:50:22] src/tree/updater_prune.cc:74: tree pruning end, 1 roots, 4 extra nodes, 0 pruned nodes, max_depth=2
[17:50:22] src/tree/updater_prune.cc:74: tree pruning end, 1 roots, 6 extra nodes, 0 pruned nodes, max_depth=2
......

最后,我打印出 res 如下:

[0] train-merror:0.800139+0.00308927    test-merror:0.815893+0.0139572

我的问题是:

1、train-merror:0.800139和test-merror:0.815893是什么意思?是不是10个文件夹的eval数据的平均值?

2、我们什么时候需要设置num_round > 1?我对 cv() 和 train() 之间的 num_round 有误解。当 cv() 时,num_round 只是再次进行另外 10 个文件夹的交叉验证。但是当 train(), num_round 设置我想要的树数。对吗?

3、当cv()时,在一次迭代中,如果我不设置提前停止,流程什么时候结束?

4,文件夹进程结束时如何打印一些指标?

谢谢!

【问题讨论】:

  • 关于问题2,我意识到这是一个愚蠢的问题。 cv() 和 train() 中的 num_round 都是同一个意思。而question3也被question2取消了

标签: machine-learning xgboost


【解决方案1】:

1、train-merror:0.800139和test-merror:0.815893是什么意思? 是不是10个文件夹的eval数据的平均值?

[0] train-merror:0.800139+0.00308927  test-merror:0.815893+0.0139572

第一列是该轮所有 10 次折叠的平均训练误差,第二列是该轮所有折叠的平均“超出/测试”错误 - 它还具有有标准差..附加

关于 2 和 3 ...num_round 是训练的最大提升轮数。如果您在提早停止之前构建 num_round 树,则培训将停止。如果您正在使用提前停止,请将其设置为高,并让提前停止决定何时停止。

最后——提早停止是一个整数,它告诉你要继续训练多少轮,即使你的测试错误不再改善——这允许一些回旋余地,因为不同的轮次可能会产生噪音 w.r.t 错误。

如果您曾经看过训练曲线,有时它们会变得更糟,然后会变得更好。这允许在该区域进行一些宽大处理,因此您不会过早停止训练。将其设置为至少 10,xgboost 将保存实际的最佳回合。另外,如果您的ETA 足够小,那将是一个无关紧要的数字。将您的ETA 设置得足够低,以便至少获得几百轮 IMO。

res 对象将包含训练中的所有相关信息。只需保存该对象或从中打印一些信息...

【讨论】:

    猜你喜欢
    • 2016-03-29
    • 2018-08-02
    • 2019-11-16
    • 2018-05-17
    • 2017-01-27
    • 2020-02-06
    • 1970-01-01
    • 2017-10-07
    • 1970-01-01
    相关资源
    最近更新 更多