我开始使用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-rmse
和train-rmse
,或者至少绘制这些曲线。
答案 0 :(得分:5)
保存中间结果的一种方法是将evals_result
参数传递给xgb.train
方法。
我们假设您已经以XGB格式创建了train
和eval
矩阵,并为XGBoost初始化了一些参数params
(在我的情况下,{{1} }})。
创建一个空字典
params = {'max_depth':2, 'eta':1, 'silent':1, 'objective':'binary:logistic' }
创建一个关注列表,(我想你已经有了它,因为你正在打印train-rmse)
progress = dict()
将这些内容传递给watchlist = [(train,'train-rmse'), (eval, 'eval-rmse')]
xgb.train
在迭代结束时,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-demo
和eval-rmse-demo