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,如何在文件夹处理结束时打印一些指标?
谢谢!
答案 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
对象将包含培训中的所有相关信息。只需保存该对象或从中打印一些信息......