XGBoost CV y ​​mejor iteración.

Estoy usando XGBoost cv para encontrar el número óptimo de rondas para mi modelo. Estaría muy agradecido si alguien pudiera confirmar (o refutar), el número óptimo de rondas es:

estop = 40 res = xgb.cv(params, dvisibletrain, num_boost_round=1000000000, nfold=5, early_stopping_rounds=estop, seed=SEED, stratified=True) best_nrounds = res.shape[0] - estop best_nrounds = int(best_nrounds / 0.8) 

es decir: el número total de rondas completadas es res.shape [0], por lo que para obtener el número óptimo de rondas, restamos el número de rondas de paro anticipado.

Luego, aumentamos el número de rondas, en función de la fracción utilizada para la validación. ¿Es eso correcto?

Sí, suena correcto si cuando haces best_nrounds = int(best_nrounds / 0.8) consideras que tu conjunto de validación fue el 20% de tus datos de entrenamiento completos (otra forma de decir que realizaste una validación cruzada de 5 veces).

La regla puede entonces generalizarse como:

 n_folds = 5 best_nrounds = int((res.shape[0] - estop) / (1 - 1 / n_folds)) 

O si no realiza CV pero una sola validación:

 validation_slice = 0.2 best_nrounds = int((res.shape[0] - estop) / (1 - validation_slice)) 

Puede ver un ejemplo de esta regla aplicada aquí en Kaggle (vea los comentarios).

Puede tener el mejor número de iteración a través de ‘res.best_iteration’