1

J'ai lu que c'est un des avantages de xgboost, que vous pouvez former sur un modèle existant. Disons que j'entraîné mon modèle pour 100 itérations, et que vous souhaitez redémarrer à partir de là pour terminer une autre 100 itérations, au lieu de refaire tout à partir de zéro ..Comment booster sur un modèle xgboost existant depuis sa dernière itération sans commencer depuis le début pour multi: prob

Je trouve cela dans les exemples xgboost de démonstration, d'ici 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) 

mais cet exemple est pour objectif, binaire: logistique .. si je fais cela, je reçois cette erreur sur set_base_margin

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

J'ai un modèle qui a obtenu une formation pour 100 itérations .. Je veux faire encore 100 itérations, mais je ne veux pas recommencer depuis le début.

Toute aide .. ??

Répondre

2

figured it out, de cette question dans repo https://github.com/dmlc/xgboost/issues/235

Oui, de ce xgboost est quelque chose que nous avons négligé lors de la conception de l'interface, vous devriez être en mesure de set_margin avec tableau aplaties.

set_base_margin attend un tableau 1d, donc il vous suffit d'aplatir les prédictions sur marge et passer ensuite à set_base_margin

dans le code ci-dessus ajouter ces lignes avant de la marge de base

ptrain = ptrain.reshape(-1, 1) 
ptest = ptest.reshape(-1, 1) 

et l'entraînement sur le nouveau dtrain avec des marges de base mises à jour continuera à itérer à partir de cette étape

0

Les choses ont changé ed now ....

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