访问列车和xgboost中的评估错误

时间:2016-02-04 09:58:05

标签: python machine-learning xgboost

我开始使用python xgboost支持。有没有办法在每个训练时代获得训练和验证错误?我在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,或者至少绘制这些曲线。

2 个答案:

答案 0 :(得分:5)

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

我们假设您已经以XGB格式创建了traineval矩阵,并为XGBoost初始化了一些参数params(在我的情况下,{{1} }})。

  1. 创建一个空字典

    params = {'max_depth':2, 'eta':1, 'silent':1, 'objective':'binary:logistic' }

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

    progress = dict()

  3. 将这些内容传递给watchlist = [(train,'train-rmse'), (eval, 'eval-rmse')]

    xgb.train

  4. 在迭代结束时,bst = xgb.train(param, train, 10, watchlist, evals_result=progress)字典将包含所需的训练/验证错误

    progress

答案 1 :(得分:1)

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

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

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