Je suis une personne transcendantale, alors je vais le laisser comme un mémorandum. Si vous faites une erreur, veuillez le signaler car c'est un tofu mental Un mémorandum qui rend le code du site de référence facile à comprendre L'environnement est azureml et je me tourne vers optuna pour rechercher des para
--num_boost_round est le nombre d'itérations de renforcement de gradient --Early_stopping termine le tour lorsque la précision de la prédiction n'améliore pas le nombre de fois spécifié pour la validation. --callophone est une fonction de type débogage incluse dans XGBoost (ambiguë) --Référence https://xgboost.readthedocs.io/en/latest/python/python_api.html#callback-api
Implémentation minimale
def return_callback():
def print_num_boost_round(env):
iteration = env.iteration
msg = '\t'.join([str(x) for x in env.evaluation_result_list])
print(iteration, msg)
Par conséquent
0 ('validation_0-mae', 2657.650391)
1 ('validation_0-mae', 2657.609375)
0 ('validation_0-mae', 2624.649658)
2 ('validation_0-mae', 2657.425049)
1 ('validation_0-mae', 2624.609131)
Vous obtenez quelque chose comme Puis changez le code en
def return_callback():
def print_num_boost_round(env):
print(env)
XGBoostCallbackEnv(model=<xgboost.core.Booster object at 0x7fa972703208>, cvfolds=None, iteration=0, begin_iteration=0, end_iteration=100, rank=0, evaluation_result_list=[('validation_0-mae', 2657.623047)])
XGBoostCallbackEnv(model=<xgboost.core.Booster object at 0x7fa972703208>, cvfolds=None, iteration=1, begin_iteration=0, end_iteration=100, rank=0, evaluation_result_list=[('validation_0-mae', 2657.463379)])
XGBoostCallbackEnv(model=<xgboost.core.Booster object at 0x7f7a8224c208>, cvfolds=None, iteration=0, begin_iteration=0, end_iteration=100, rank=0, evaluation_result_list=[('validation_0-mae', 2624.622314)])
XGBoostCallbackEnv(model=<xgboost.core.Booster object at 0x7fa972703208>, cvfolds=None, iteration=2, begin_iteration=0, end_iteration=100, rank=0, evaluation_result_list=[('validation_0-mae', 2657.411377)])
XGBoostCallbackEnv(model=<xgboost.core.Booster object at 0x7f7a8224c208>, cvfolds=None, iteration=1, begin_iteration=0, end_iteration=100, rank=0, evaluation_result_list=[('validation_0-mae', 2624.467285)])
XGBoostCallbackEnv(model=<xgboost.core.Booster object at 0x7fa972703208>, cvfolds=None, iteration=3, begin_iteration=0, end_iteration=100, rank=0, evaluation_result_list=[('validation_0-mae', 2657.355957)])
XGBoostCallbackEnv(model=<xgboost.core.Booster object at 0x7f0ced02c208>, cvfolds=None, iteration=0, begin_iteration=0, end_iteration=100, rank=0, evaluation_result_list=[('validation_0-mae', 2639.834229)])
XGBoostCallbackEnv(model=<xgboost.core.Booster object at 0x7f7a8224c208>, cvfolds=None, iteration=2, begin_iteration=0, end_iteration=100, rank=0, evaluation_result_list=[('validation_0-mae', 2624.416016)])
Il s'avère que la valeur de l'itération est obtenue par env.iteration
Référence (https://kunsen.net/2020/05/02/post-3199/)
param_list['num_boost_round'] = trial.suggest_int("num_boost_round", 100, 500)
Tout d'abord, essayez de tourner num_boost_round avec la valeur initiale de 100 à 500.
Si vous le tournez tel quel
{
'max_depth': 20,
'eta': 0.22613771945050443,
'num_leaves': 2560,
'lambda': 6.0425529841148486e-05,
'alpha': 6.69043393720362e-07,
'num_boost_round': 236,
'colsample_bytree': 0.9727432424922707,
'min_child_weight': 239.6173703091301
}
num_boost_round vaut 236 (pas le même à chaque fois car c'est le caprice d'Optuna) Alors qu'est-ce que 236 ... Cela se passe-t-il environ 236 fois en premier lieu (au fait, c'était 253 quand je l'ai exécuté à nouveau) En conséquence, sortie
0 ('validation_0-mae', 2657.650391)
1 ('validation_0-mae', 2657.609375)
0 ('validation_0-mae', 2624.649658)
2 ('validation_0-mae', 2657.425049)
1 ('validation_0-mae', 2624.609131)
Est en sortie, mais l'itération atteint seulement 100 comme le montre end_iteration. Ensuite, j'ai recherché la valeur minimale (manuelle) Puisque 135,56956 était la valeur minimale, j'ai compté le nombre de lignes où cette valeur est apparue. Le résultat est 482
Si vous regardez de près, ce n'est pas parce que les itérations sont les mêmes que les valeurs sont les mêmes. Cela aurait peut-être été plus facile à comprendre si je lisais l'article XGBoost et l'avais comme connaissance préalable ... N'y a-t-il pas d'autre choix que de le pousser maintenant ... ??
Recommended Posts