我读到xgboost的优势之一,你可以在现有的模型上训练。假设我训练了我的模型进行了100次迭代,并希望从那里重新开始再完成100次迭代,而不是从头开始重做所有内容。
我在xgboost演示示例中找到了这个,从这里https://github.com/dmlc/xgboost/blob/master/demo/guide-python/evals_result.py
bst = xgb.train( param, dtrain, 1, watchlist )
ptrain = bst.predict(dtrain, output_margin=True)
ptest = bst.predict(dtest, output_margin=True)
dtrain.set_base_margin(ptrain)
dtest.set_base_margin(ptest)
print ('this is result of running from initial prediction')
bst = xgb.train( param, dtrain, 1, watchlist )
但是这个特殊的例子是针对客观的,二元的:logistic ..如果我这样做,我在set_base_margin
TypeError: only length-1 arrays can be converted to Python scalars
我有一个经过100次迭代训练的模型..我想再做100次迭代,但不想再从头开始。
任何帮助.. ??
答案 0 :(得分:2)
从xgboost repo https://github.com/dmlc/xgboost/issues/235
中的这个问题中弄明白了是的,这是我们在设计界面时忽略的东西,你应该可以使用扁平数组set_margin。
set_base_margin
需要一个1d数组,因此您只需要展平边距预测,然后将其传递给set_base_margin
在上面的代码中,在设置基本边距
之前添加这些行ptrain = ptrain.reshape(-1, 1)
ptest = ptest.reshape(-1, 1)
对具有更新基础边距的新dtrain
的培训将继续从该阶段进行迭代
答案 1 :(得分:0)
现在情况发生了变化......
bst = xgb.train(param, dtrain, 1, watchlist , xgb_model=bst )