如何从最后一次迭代中提升现有的xgboost模型,而不是从multi:prob开始

问题描述 投票:1回答:2

我读到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 )

但这个特殊的例子是客观的,二元的:逻辑的...如果我这样做,我在set_base_margin上得到这个错误

TypeError: only length-1 arrays can be converted to Python scalars

我有一个经过100次迭代训练的模型..我想再做100次迭代,但不想再从头开始。

任何帮助.. ??

python machine-learning artificial-intelligence xgboost
2个回答
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培训和更新的基准利润将继续从该阶段进行迭代


0
投票

现在情况发生了变化......

bst = xgb.train(param, dtrain, 1, watchlist , xgb_model=bst )
© www.soinside.com 2019 - 2024. All rights reserved.