xgboost 中的访问训练和评估错误

Access train and evaluation error in xgboost

我开始使用 python xgboost 后台。有没有办法在每个训练时期获得训练和验证错误?我在 documentation

中找不到

已经训练了一个简单的模型并得到了输出:

[09:17:37] src/tree/updater_prune.cc:74: tree pruning end, 1 roots, 124 extra nodes, 0 pruned nodes, max_depth=6

[0] eval-rmse:0.407474 train-rmse:0.346349 [09:17:37] src/tree/updater_prune.cc:74: tree pruning end, 1 roots, 116 extra nodes, 0 pruned nodes, max_depth=6

1 eval-rmse:0.410902 train-rmse:0.339925 [09:17:38] src/tree/updater_prune.cc:74: tree pruning end, 1 roots, 124 extra nodes, 0 pruned nodes, max_depth=6

[2] eval-rmse:0.413563 train-rmse:0.335941 [09:17:38] src/tree/updater_prune.cc:74: tree pruning end, 1 roots, 126 extra nodes, 0 pruned nodes, max_depth=6

[3] eval-rmse:0.418412 train-rmse:0.333071 [09:17:38] src/tree/updater_prune.cc:74: tree pruning end, 1 roots, 114 extra nodes, 0 pruned nodes, max_depth=6

但是我需要在代码中进一步传递这些 eval-rmsetrain-rmse 或者至少绘制这些曲线。

保存中间结果的一种方法是将 evals_result 参数传递给 xgb.train 方法。

假设您已经创建了 XGB 格式的 traineval 矩阵,并为 XGBoost 初始化了一些参数 params(在我的例子中,params = {'max_depth':2, 'eta':1, 'silent':1, 'objective':'binary:logistic' } ).

  1. 创建一个空字典

    progress = dict()

  2. 创建一个监视列表,(我猜你已经有了它,因为你正在打印 train-rmse)

    watchlist = [(train,'train-rmse'), (eval, 'eval-rmse')]

  3. 将这些传递给 xgb.train

    bst = xgb.train(param, train, 10, watchlist, evals_result=progress)

在迭代结束时,progress 字典将包含所需的 train/validation 错误

> print progress
{'train-rmse': {'error': ['0.50000', ....]}, 'eval-rmse': { 'error': ['0.5000',....]}}

@MaxPY,这是对您对上面 Sudeep Juvekar 的回答的评论的回复:进度字典的键设置为您作为监视列表的第二个参数传递的任何字符串。例如,

watchlist  = [(train,'train-rmse-demo'), (eval, 'eval-rmse-demo')]

将字典键设置为 train-rmse-demoeval-rmse-demo