[PYTHON] Ich möchte die Anzahl von num_boost_round anzeigen, wenn Early_stopping mithilfe des XGBoost-Rückrufs angewendet wird (nicht erreicht).

Annahme

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

Vorausgesetztes Wissen

--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).

Implementierung

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/)

Versuchen Sie, num_boost_round in Optuna zu drehen, um zu beurteilen

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.

Angegebene Parameter

Liste der von Optuna angegebenen Parameter

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

Fazit

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

Ich möchte die Anzahl von num_boost_round anzeigen, wenn Early_stopping mithilfe des XGBoost-Rückrufs angewendet wird (nicht erreicht).
Wenn ich mit matplotlib eine große Anzahl von Diagrammen generiere, möchte ich das Diagramm nicht auf dem Bildschirm anzeigen (Jupyter-Umgebung).
Ich möchte ausgeben, während der Wert des Typs (z. B. datetime) konvertiert wird, der bei der Ausgabe von json mit Python nicht unterstützt wird
Ich möchte den Fortschrittsbalken anzeigen
Ich möchte das Problem des Speicherverlusts bei der Ausgabe einer großen Anzahl von Bildern mit Matplotlib lösen
Ich möchte den Pfad des Verzeichnisses abrufen, in dem die laufende Datei gespeichert ist.
Ich möchte das Erscheinungsbild von zabbix anpassen
Ich möchte den Fortschritt in Python anzeigen!
Ich möchte einen Screenshot der Site in Docker mit einer beliebigen Schriftart erstellen
Ich möchte über die Verbindungsumgebung benachrichtigt werden, wenn RaspberryPi eine Verbindung zum Netzwerk herstellt
Ich möchte das Ausführungsergebnis von strace erfassen
Ich möchte widerlegen "Das ist in Ruby nicht cool"
Ich möchte die Grundlagen von Bokeh vollständig verstehen
Ich möchte ssh mit dem Befehl expected automatisieren!
Ich möchte die Sicherheit der SSH-Verbindung erhöhen
[Für Anfänger] Ich möchte die Anzahl der Lernerfahrungen leicht verständlich erklären.
Ich möchte ssh mit dem Befehl expected automatisieren! Teil 2
Ich möchte nur die SudachiPy-Normalisierungsverarbeitung verwenden
Ich möchte Betriebsinformationen über die Yahoo-Route erhalten
Ich möchte die Authentizität eines Elements eines numpy-Arrays bestimmen
Ich möchte die Natur von Python und Pip kennenlernen
Ich möchte den EDINET-Code und die Wertpapiernummer zuordnen
Keras Ich möchte die Ausgabe einer beliebigen Ebene erhalten !!
Ich möchte die Legende der IT-Technologiewelt kennenlernen
Die Geschichte, als ich von Caused by SSLError abhängig war ("Kann keine Verbindung zur HTTPS-URL herstellen, da das SSL-Modul nicht verfügbar ist.")
Wenn Sie mehrere Versionen derselben Python-Bibliothek verwenden möchten (virtuelle Umgebung mit venv)
Ich möchte den Namen der ausgeführten Funktion / Methode erhalten
[Pytorch] Ich möchte die Trainingsparameter des Modells manuell zuweisen
Ich habe einen TypeError: 'int'-Objekt ist bei Verwendung von Keras nicht iterierbar
Ich habe versucht, den Index der Liste mithilfe der Aufzählungsfunktion abzurufen
[Linux] Ich möchte das Datum wissen, an dem sich der Benutzer angemeldet hat
Ich möchte den Anfang des nächsten Monats mit Python ausgeben
Ich wollte die Klassifizierung von CIFAR-10 mit dem Chainer-Trainer in Frage stellen
Ich möchte Python GUI ausführen, wenn Raspberry Pi startet
Wenn ich versuche, pip zu verwenden, ist das SSL-Modul nicht verfügbar.
Ich möchte die Position meines Gesichts mit OpenCV überprüfen!
Ich möchte die Bevölkerung jedes Landes der Welt kennenlernen.
Python> Ich möchte die Nummer 8 als 008 anzeigen> "{0: 0> 3}" drucken. Format (8) oder "{Wert: 0> 3}". Format (Wert = 8) oder "% 03d"% 8 Oder formatieren Sie (8, "03d") oder str (8) .zfill (3) oder (Python 3.6 oder höher) f "{8: 0> 3}"
[Frage] Bei der zufälligen Waldregression von sk-learn tritt ein Fehler auf, wenn die Anzahl der Parallelen auf -1 gesetzt wird.
Zur Zeit möchte ich mit FastAPI zeigen, wie man eine solche API in swagger verwendet
Ich habe versucht, das Gesichtsbild mit sparse_image_warp von TensorFlow Addons zu transformieren
Ich möchte wütend auf meine Mutter werden, wenn die Erinnerung knapp ist
Ich habe versucht, die Trefferergebnisse von Hachinai mithilfe der Bildverarbeitung zu erhalten
So ermitteln Sie die Anzahl der CPUs ohne den Befehl sar
Wenn Sie es so verwenden möchten, wie es ist, wenn Sie es mit Lambda-Memo verwenden
Python Hinweis: Wenn Sie die Attribute eines Objekts kennen möchten
Ich möchte ein Bild auf Jupyter Notebook mit OpenCV (Mac) anzeigen.
Ich möchte das Ergebnis von "Zeichenfolge" .split () in Python stapelweise konvertieren
Ich möchte die abstrakte Klasse (ABCmeta) von Python im Detail erklären
Wenn Sie den HTTP-Header des Testclients von Flask ändern möchten
Ich möchte eine Liste in der Reihenfolge anderer Listen sortieren
Ich möchte meine Gefühle mit den Texten von Mr. Children ausdrücken
(Python) Ich habe versucht, 1 Million Hände zu analysieren ~ Ich habe versucht, die Anzahl der AA ~ zu schätzen
Ich habe versucht, die Phase der Geschichte mit COTOHA zu extrahieren und zu veranschaulichen
Ich möchte die Gefühle von Menschen analysieren, die sich treffen und zittern wollen
Ich möchte den Erfolg von NBA-Spielern mit dem Qore SDK vorhersagen
Ich möchte einen beliebigen Befehl im Befehlsverlauf von Shell belassen