【问题标题】:Access train and evaluation error in xgboostxgboost 中的访问训练和评估错误
【发布时间】:2016-05-13 20:59:43
【问题描述】:

我开始使用 python xgboost backage。有没有办法在每个训练时期获得训练和验证错误?我在documentation 中找不到一个

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

[09:17:37] src/tree/updater_prune.cc:74:树修剪结束,1 个根, 124 个额外节点,0 个修剪节点,max_depth=6

[0] eval-rmse:0.407474 train-rmse:0.346349 [09:17:37] src/tree/updater_prune.cc:74:树修剪结束,1 个根,116 个额外 节点,0 修剪节点,max_depth=6

1 eval-rmse:0.410902 train-rmse:0.339925 [09:17:38] src/tree/updater_prune.cc:74:树修剪结束,1 个根,124 个额外 节点,0 修剪节点,max_depth=6

[2] eval-rmse:0.413563 train-rmse:0.335941 [09:17:38] src/tree/updater_prune.cc:74:树修剪结束,1 个根,126 个额外 节点,0 修剪节点,max_depth=6

[3] eval-rmse:0.418412 train-rmse:0.333071 [09:17:38] src/tree/updater_prune.cc:74:树修剪结束,1 个根,114 个额外 节点,0 修剪节点,max_depth=6

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

【问题讨论】:

    标签: python machine-learning xgboost


    【解决方案1】:

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

    假设您创建了一个 XGB 格式的 train 和一个 eval 矩阵,并为 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 字典将包含所需的训练/验证错误

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

    【讨论】:

    • 谢谢,非常清楚和乐于助人!在我使用的版本中,进度字典虽然有不同的键
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-20
      • 2022-07-05
      • 2019-10-05
      • 1970-01-01
      • 1970-01-01
      • 2018-06-30
      相关资源
      最近更新 更多