Ich bin eine transzendentale Person, also werde ich es als Memorandum belassen. Wenn Sie einen Fehler machen, weisen Sie bitte darauf hin, da es sich um einen mentalen Tofu handelt Ein Memorandum, das den Code der Referenzseite leicht verständlich macht Die Umgebung ist azureml und ich drehe mich optuna, um nach hohem Para zu suchen
--num_boost_round ist die Anzahl der Gradientenverstärkungsiterationen --Early_stopping beendet die Runde, wenn die Vorhersagegenauigkeit die angegebene Anzahl für die Validierung nicht verbessert. --callophone ist eine Debug-ähnliche Funktion, die in XGBoost enthalten ist (mehrdeutig).
Minimale Implementierung
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)
Als Ergebnis
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)
Du bekommst so etwas wie Ändern Sie dann den Code in
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)])
Es stellt sich heraus, dass der Wert der Iteration durch env.iteration erhalten wird
Referenz (https://kunsen.net/2020/05/02/post-3199/)
param_list['num_boost_round'] = trial.suggest_int("num_boost_round", 100, 500)
Versuchen Sie zunächst, num_boost_round mit dem Anfangswert 100 bis 500 zu drehen.
Wenn Sie es so drehen, wie es ist
{
'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 ist 236 (nicht jedes Mal das gleiche, weil es Optunas Laune ist) Also, was ist 236 ... Geht es überhaupt 236 Mal (übrigens war es 253, als ich es erneut ausführte) Als Ergebnis Ausgabe
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)
Wird ausgegeben, aber die Iteration wird nur bis zu 100 angezeigt, wie end_iteration zeigt. Als nächstes suchte ich nach dem Mindestwert (manuell) Da 135.56956 der Mindestwert war, zählte ich die Anzahl der Zeilen, in denen dieser Wert angezeigt wurde. Das Ergebnis ist 482
Wenn Sie genau hinschauen, bedeutet dies nicht, dass die Werte gleich sind, nur weil die Iterationen gleich sind. Es wäre vielleicht einfacher zu verstehen gewesen, wenn ich das XGBoost-Papier gelesen hätte und es als Grundvoraussetzung hätte ... Gibt es keine andere Wahl, als es jetzt zu schieben ... ??
Recommended Posts