什么时候xgboost交叉验证停止

时间:2017-06-30 10:00:59

标签: machine-learning xgboost

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,火车错误是什么:0.800139和test-merror:0.815893是什么意思?它是10个文件夹的评估数据的平均值吗?

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

3,当cv(),在一次迭代中,如果我没有设置提前停止,那么进程何时结束?

4,如何在文件夹处理结束时打印一些指标?

谢谢!

1 个答案:

答案 0 :(得分:0)

  

1,火车错误是什么: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对象将包含培训中的所有相关信息。只需保存该对象或从中打印一些信息......