2017-06-30 7 views
1
param = {'max_depth': 2, 'eta': 1, 'silent': 0, 'objective': 
     'multi:softmax', 'num_class': 10} 
num_round = 1 
res = xgb.cv(param, dtrain, num_round, nfold=10, 
      metrics={'merror'}, seed=0, verbose_eval=True, 
      callbacks=[xgb.callback.print_evaluation(show_stdv=True), 
         xgb.callback.early_stop(3)]) 

Je peux voir beaucoup des journaux suivants:quand est-ce xgboost arrêt de validation croisée

[17:50:22] src/tree/updater_prune.cc:74: tree pruning end, 1 roots, 4 extra nodes, 0 pruned nodes, max_depth=2 
[17:50:22] src/tree/updater_prune.cc:74: tree pruning end, 1 roots, 6 extra nodes, 0 pruned nodes, max_depth=2 
...... 

Enfin, j'imprimer res comme suit:

[0] train-merror:0.800139+0.00308927 test-merror:0.815893+0.0139572 

Ma question est la suivante:

1, Que signifie le train-merror: 0.800139 et test-merror: 0.815893? Est-ce la valeur moyenne des données eval du dossier 10?

2, Quand devons-nous définir num_round> 1? J'ai fait un malentendu sur le num_round entre cv() et train(). Lorsque cv(), num_round effectue à nouveau une autre validation croisée de 10 dossiers. Mais quand train(), num_round définit le nombre d'arbres que je veux. Est-ce correct?

3, Lorsque cv(), dans une itération, quand le processus se termine-t-il si je ne mets pas d'arrêt anticipé? 4, comment puis-je imprimer une métrique à la fin d'un processus de dossier?

Merci!

+0

A propos de la question 2, j'ai réalisé que c'était une question stupide. Les deux num_round dans cv() et train() ont la même signification. Et la question 3 est également annulée par la question 2 – iloveml

Répondre

0

1, What does the train-merror:0.800139 and test-merror:0.815893 mean? Is it the mean value of 10 folder's eval data?

[0] train-merror:0.800139+0.00308927 test-merror:0.815893+0.0139572 

La première colonne est l'erreur de formation moyenne pour l'ensemble des 10 plis pour ce tour, et la 2ème colonne est la moyenne « de pli/test » erreur pour tous les plis pour que rond - il a également l'écart-type là .. ajouté

en ce qui concerne 2 & 3 ... num_round est le nombre maximum de tours de renforcement pour l'entraînement. La formation cessera si vous construisez num_round arbres avant l'arrêt anticipé est engagé. Réglez-le haut si vous utilisez un arrêt précoce, et laissez l'arrêt précoce décider quand arrêter. Enfin - l'arrêt anticipé est un nombre entier qui vous indique combien de tours continueront à s'entraîner, même si votre erreur de test NE S'AMÉLIORE PLUS - cela permet une certaine marge de manœuvre car les différents tours peuvent être bruyants avec une erreur.

Si vous avez déjà regardé les courbes d'entraînement, elles s'aggravent parfois, puis s'améliorent. Cela permet une certaine indulgence dans ce domaine, donc vous n'arrêtez pas de vous entraîner trop tôt. Réglez-le à un minimum de 10, xgboost permettra d'économiser le meilleur tour actuel. De plus, si votre ETA est assez petit, ce sera un nombre sans conséquence. Réglez votre ETA assez bas pour obtenir au moins quelques centaines de tours IMO.

L'objet res aura toutes les informations pertinentes de la formation. Il suffit de sauvegarder cet objet ou d'en imprimer quelques infos ...