我读到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次迭代,但不想再从头开始。
任何帮助.. ??
从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
培训和更新的基准利润将继续从该阶段进行迭代
现在情况发生了变化......
bst = xgb.train(param, dtrain, 1, watchlist , xgb_model=bst )