1

Я читал, что это одно из преимуществ xgboost, которое вы можете обучать существующей модели. Скажем, я тренировалась моя модель 100 итераций, и хочу, чтобы перезапустить оттуда, чтобы закончить еще 100 итераций, а не переделку все с нуля ..Как усилить существующую модель xgboost с ее последней итерации без начала с начала для multi: prob

Я нашел это в 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 итераций, но не хотят начинать с самого начала.

Любая помощь .. ??

ответ

2

понял это, от этого вопроса в xgboost репо 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

Вещи чанг ed сейчас ....

bst = xgb.train(param, dtrain, 1, watchlist , xgb_model=bst)