Effiziente Abstimmung der XGBoost-ParameterHallo @russ_wolfinger ,
Ich habe daran gearbeitet, Modelle mit XGBoost zu erstellen und sie mit anderen Baummodellen und Nicht-Baummodellen wie NN zu vergleichen. Ich mache einen ähnlichen Ansatz wie Nate und halte einen Teil meines ursprünglichen Datensatzes (in einer völlig anderen Datentabelle) zurück und verwende dann die Modellvergleichsplattform, um zu sehen, wie gut diese Modelle mit dem Testdatensatz miteinander verglichen werden.
Ich stelle fest, dass XGBoost mit dem Testdatensatz nicht so gut funktioniert, wie ich es erwartet hätte. Ich finde, dass Bootstrap Forest derzeit einen besseren Job macht. Ich habe die Standardeinstellung und die folgenden als beste Ausgabe einer Tuning-Tabelle für einen optimierten XGBoost verglichen. Es kann sein, dass ich die Anpassung nicht sehr gut einstelle, daher frage ich mich, ob es eine effizientere Möglichkeit gibt, die Anpassung anzupassen, da es so viele verschiedene Parameter gibt, die geändert werden können.
Ich habe die Beispiele durchgesehen und die Online-Dokumentation gelesen, auf die in der PDF-Hilfe verwiesen wird, aber es gibt nicht viele Beschreibungen für praktische Hilfe beim Optimieren des Modells. Als Hinweis verwende ich die Single-Hold-Out-Validierung und nicht die K-fache Kreuzvalidierung. Ist es besser, zuerst ein sehr komplexes Modell zu erstellen, das möglicherweise leicht überpasst, und es dann mit den anderen Parametern zurückzuschneiden, um es konservativer zu machen?
DS
Betreff: Effiziente Abstimmung der XGBoost-ParameterHallo @russ_wolfinger ,
Vielen Dank für die aktualisierten Informationen. Ich habe die Ausgabe eines optimierten Boosted Tree- und Bootstrap-Waldes gegen den XGBoost so gut wie möglich getestet, nachdem ich XGBoost nahe an die anderen Plattformen angepasst hatte, die ich konnte, und die Ausgaben waren gut korreliert. Nicht genau, aber sehr nah!
Das Befolgen des Verfahrens in dem Link, den ich zuvor gepostet habe, hat wirklich dazu beigetragen, sich einem besser abgestimmten Modell zu nähern.
Zu ein paar anderen Rückmeldungen:
1. Ich habe kürzlich verstanden, was das "Entfernen der gezeigten Modelle" unter "Vergleichen" bewirkt, wie es heißt, aber es war nicht klar, dass ein deaktiviertes Kontrollkästchen es behalten würde, wenn es deaktiviert wäre. Dies war ein hilfreicher Weg, um mögliche Anpassungen nach dem Sortieren der Datentabelle nach der Validierung R ^ 2 zu eliminieren.
2. Ich habe festgestellt, dass es beim Ausführen eines Optimierungsdesigns wichtig ist, sicherzustellen, dass die erste Spalte dieselben festen Werte wie die Min / Max-Spalten hat oder irgendwo dazwischen liegt (wenn sie variiert wird), damit sie ordnungsgemäß funktioniert. Es gab einige Male, in denen ich einen anderen Wert optimierte, z. B. min_child_weight, und feste Werte für die Iterationen eingegeben hatte (z. B. Min / Max 150), aber der erste Spaltenwert wurde bei 100 belassen. Wenn dies der Fall ist, werden die Iterationen bei 100 und nicht bei 150 gehalten. Ich würde denken, wenn die Min / Max-Werte auf die gleichen Werte eingestellt wären, sollte die erste Spalte diesen Wert abrufen und neu füllen, wie dies bei Verwendung der Tuning-Tabelle für die nicht festen Parameter der Fall ist. Im folgenden Beispiel habe ich max_depth und min_child_weight optimiert, aber es gab einige Fälle, in denen ich Iterationen bei 100 belassen habe, obwohl min / max auf 387 festgelegt waren. Ich musste manuell zurückgehen und es auf 387 ändern, damit es richtig berechnet wurde.

Vielen Dank!,
DS
Betreff: Effiziente Abstimmung der XGBoost-ParameterHallo @DS ,
Vielen Dank, dass Sie dies weiter verfolgen. Ich habe kürzlich einige Probleme mit Formel-Metadaten gefunden und behoben, die sich derzeit möglicherweise negativ auf die XGBoost-Ergebnisse in der Modellvergleichsplattform auswirken. Diese und einige weitere Updates werden in einigen Monaten in JMP Pro 16 Early Adopter verfügbar sein. In der Zwischenzeit können Sie einige grundlegende Vergleiche mit der Boosted Tree-Plattform direkt in Ihrer JMP-Tabelle versuchen.
Die folgenden Parameter werden direkt zwischen Boosted Tree und XGBoost zugeordnet:
- Anzahl der Ebenen <-> Iterationen
- Teilung pro Baum <-> max_depth
- Lernrate <-> Lernrate
- Mindestgröße Split <-> min_child_weight
- Zeilenabtastrate <-> Unterabtastung
- Spaltenabtastrate <-> colsample_bytree
Es kann ein wenig weiter helfen, den erweiterten XGBoost-Parameter grow_policy in "lossguide" zu ändern. Versuchen Sie, wie Sie angeben, Vorhersagen aus zwei ähnlichen Modellen anzupassen und zu speichern, und zeichnen Sie dann die Vorhersagen gegeneinander auf. Sie sollten stark korreliert sein.
Die Tuning-Designtabelle unter Erweiterte Optionen entspricht Ihren Vorstellungen. Sie müssen eine separate JMP-Tabelle mit Spaltennamen einrichten, die genau mit den XGBoost-Parameternamen übereinstimmen, und dann den Namen dieser JMP-Tabelle manuell in das Parameterfeld eingeben. Sie können die Tabelle manuell von Grund auf neu erstellen oder mit der rechten Maustaste in die Modellvergleichstabelle> Als Datentabelle speichern klicken, um zu beginnen. Dies ermöglicht die Spezifikation beliebiger Designs für alle Parameter, wurde jedoch zu diesem Zeitpunkt nur geringfügig getestet. Überprüfen Sie daher die Ergebnisse sorgfältig.
Betreff: Effiziente Abstimmung der XGBoost-ParameterHallo @russ_wolfinger ,
Danke für die Auskunft. Ich fand diesen Beitrag sehr hilfreich, zumindest um ein direktes Beispiel und einen iterativen schrittweisen Ansatz zum Optimieren von XGBoost durchzugehen.
https://www.analyticsvidhya.com/blog/2016/03/complete-guide-parameter-tuning-xgboost-with-codes-python/
Meine besondere Situation hat ungefähr 3500 Trainingsreihen und 1000 Testreihen. Wie bereits erwähnt, befinden sich meine Testzeilen in einer separaten Datentabelle, die ich mit der ersten verknüpfe und dann Modelle vergleiche. Hier erfahren Sie, welches Modell für einen nicht verwendeten Datensatz tatsächlich die beste Vorhersage liefert. Außerdem habe ich die 3500 Trainingszeilen in 80/20 Zug- / Validierungszeilen aufgeteilt, die nach meiner Y-Ausgabe, die ich modelliere, geschichtet sind.
Ich werde verschiedene Abstimmungsschemata durcharbeiten, um herauszufinden, was am besten funktioniert. Eine Sache, die ich tun möchte, ist zu überprüfen, ob XGBoost mir die "gleiche" Ausgabe geben kann, wie z. B. Bootstrap-Gesamtstruktur. Ist es möglich, die Parameter entweder aus der Bootstrap-Gesamtstruktur oder dem Boosted Tree zu übernehmen und in die entsprechenden Einstellungen in XGBoost zu konvertieren? Im Prinzip sollte XGBoost fast das gleiche Ergebnis liefern, jedoch viel schneller. Ich habe versucht, einige Beiträge dazu zu lesen, aber ich habe immer noch Probleme damit, die Einstellungen auf den anderen Plattformen in XGBoost zu übersetzen.
Ist es möglich, dass die Plattform für Vergleichsmodelle das XGBoost-Modell unterschiedlich bewertet?
Einige weitere klärende Fragen:
Gibt es eine Möglichkeit, die Anzahl der Bäume auf der XGBoost-Plattform zu bestimmen? Ist das das Feld "Iterationen"?
Können wir der Plattform unseren eigenen Tuning-Designtisch "füttern"? Unter den erweiterten Optionen befindet sich ein Feld mit diesem Namen, das jedoch leer ist. Wenn wir einen eigenen Tuning-Tisch haben, können wir dort den Namen eingeben?
Vielen Dank,
DS
Betreff: Effiziente Abstimmung der XGBoost-ParameterHallo @DS Vielen Dank für das Feedback. Es gibt einige anständige manuelle Methoden zum Einstellen. Ich habe gerade versucht, "tuning xgboost" zu googeln, und die ersten Links sehen vernünftig aus. Diese sind vielleicht eher eine Kunst als eine Wissenschaft, aber sie helfen dabei, die Funktionsweise der einzelnen Parameter zu beleuchten und eine allgemeine Vorstellung davon zu entwickeln, wie XGBoost funktioniert.
Ich bin gespannt auf Ihr Setup, falls Sie die Möglichkeit haben, es zu teilen oder zu veröffentlichen. In den vielen Vergleichen, die ich durchgeführt habe, sowie in Wettbewerbssituationen wie Kaggle habe ich festgestellt, dass XGBoost eine bessere Leistung erbringt. Die Leistungssteigerungen werden mit zunehmender Datensatzgröße tendenziell stärker.
Klingt so, als würden Sie einen klassischen Training-Validierungs-Test-Split durchführen. Es kann sinnvoll sein, dieses Verfahren mehrmals mit unterschiedlichen Aufteilungen auszuführen, um festzustellen, wie stabil Ihre Leistungsschätzungen sind.
Ein Vorteil von k-fold besteht darin, dass Sie einen "Bagged" -Prädiktor gegenüber den k-Modellanpassungen erhalten, der fast immer eine bessere Leistung erzielt als ein einzelnes Modell, das auf einen Teil der Daten trainiert wurde. Ein alternativer Ansatz besteht darin, die Abstimmung mit einem beliebigen Validierungsansatz durchzuführen und am Ende eine endgültige Anpassung unter Verwendung der gesamten Trainings- und Validierungsdaten vorzunehmen.