Xgboost: Ansatz (Dokumentation) Mehrdeutigkeit

Erstellt am 25. Nov. 2015  Â·  3Kommentare  Â·  Quelle: dmlc/xgboost

Hallo, ich versuche, den xgboost-Ansatz fĂŒr das Modelltraining zu verstehen. Damit meine ich folgendes. Ich kann entweder Booster verwenden und xgb.train aufrufen oder ich kann sklearn-APIs verwenden, um Classifier/Regressor zu verwenden. Das Problem, dass ich im frĂŒheren Ansatz (gemĂ€ĂŸ der xgboost-Dokumentation) die Anzahl der Boosting-Iterationen angeben muss und keine Anzahl von BĂ€umen angeben muss, wĂ€hrend ich spĂ€ter die Anzahl der Boosting-BĂ€ume angeben muss, um zu passen, aber ich habe keine Option um die Anzahl der verstĂ€rkten Iterationen anzugeben. Ist die Anzahl der Boosting-Iterationen die Anzahl der SchĂ€tzer? Kann das jemand klĂ€ren?

Wenn ich den Code richtig lese, verwenden die sklearn-APIs einen internen Booster, sodass ich meinem xgb.train clf._Booster zuweisen kann, wobei n_estimators der Anzahl der Boosted-Runden entspricht. Und ich muss clf.fit nicht anrufen, wenn eine solche Zuordnung vorgenommen wurde. Habe ich recht? Wenn ja, kann die Dokumentation angepasst werden, um explizit zu sagen, dass n_estimators das ist, was num_rounds fĂŒr xgb.train verwendet.

Es wĂ€re schön, eine Dokumentation zu haben, die genau die Beziehung zwischen dem Low-Level-Booster-Ansatz und den Sklearn-APIs erklĂ€rt. Ich verstehe, dass spĂ€ter die erste aufgerufen wird, aber es wĂ€re schön zu verstehen, wie es gemacht wird, und dies in der Dokumentation zu klĂ€ren, um Verwirrung fĂŒr das Ende zu vermeiden -Benutzer.

Hilfreichster Kommentar

Hallo Wladimir,

Boosting ist im Allgemeinen ein Meta-Algorithmus, der iterativ (oder in "Runden") eine Sequenz einfacher/schwacher Lernender (oder SchÀtzer) so trainiert, dass die gesamte Kombination besser abschneidet. Es kann verschiedene Arten von schwachen Lernenden geben, nicht nur BÀume. ZB hat xgboost BÀume und (verallgemeinerte) lineare Modelloptionen. Seltsamerweise werden diese schwachen Lerner in xgboost als "Booster" bezeichnet und das gesamte Kombinationsmodell wird als "Lerner" bezeichnet. Das verwirrte mich ein wenig, als ich zum ersten Mal die Dokumente und den Code von xgboost las, da es eine Art Umkehrung zu meinem eigenen mentalen Abdruck der Terminologie war.

Es wĂ€re zwar schön, eine konsistente Nomenklatur zwischen verschiedenen Projekten zu demselben Thema und eine konsistente, qualitativ hochwertige Cross-Link-Dokumentation zu haben, aber es ist nicht immer machbar oder leicht zu warten, insbesondere in Open-Source-Projekten. AnfĂ€nger neigen dazu, meist eine einzige BenutzeroberflĂ€che zu verwenden. Anwender, die sich mit der Materie gut auskennen, könnten die Gemeinsamkeiten leicht abbilden. Und wer sich fĂŒr Details auf niedriger Ebene interessiert, der kĂŒmmert sich normalerweise genug, um den Code zu lesen.

Was Ihre spezielle Frage betrifft, lesen Sie richtig, dass der Parameter n_estimators im sklearn-Wrapper-Code [1] num_boost_round innerhalb von train [2] zugeordnet ist. Aber warum möchten Sie als Endbenutzer ein Sklearn-Wrapper-Objekt auf diese Weise hacken? Um dies kontrollierbar zu machen, mĂŒssten Sie den Wrapper-Code ziemlich gut kennen.

[1] https://github.com/dmlc/xgboost/blob/2859c190cd0d168df25e2a7ea2b1fd5211ce94f0/python-package/xgboost/sklearn.py#L185
[2] https://github.com/dmlc/xgboost/blob/83e61bf99ec7d01607867b4e281da283230883b1/python-package/xgboost/training.py#L12

Alle 3 Kommentare

Hallo Wladimir,

Boosting ist im Allgemeinen ein Meta-Algorithmus, der iterativ (oder in "Runden") eine Sequenz einfacher/schwacher Lernender (oder SchÀtzer) so trainiert, dass die gesamte Kombination besser abschneidet. Es kann verschiedene Arten von schwachen Lernenden geben, nicht nur BÀume. ZB hat xgboost BÀume und (verallgemeinerte) lineare Modelloptionen. Seltsamerweise werden diese schwachen Lerner in xgboost als "Booster" bezeichnet und das gesamte Kombinationsmodell wird als "Lerner" bezeichnet. Das verwirrte mich ein wenig, als ich zum ersten Mal die Dokumente und den Code von xgboost las, da es eine Art Umkehrung zu meinem eigenen mentalen Abdruck der Terminologie war.

Es wĂ€re zwar schön, eine konsistente Nomenklatur zwischen verschiedenen Projekten zu demselben Thema und eine konsistente, qualitativ hochwertige Cross-Link-Dokumentation zu haben, aber es ist nicht immer machbar oder leicht zu warten, insbesondere in Open-Source-Projekten. AnfĂ€nger neigen dazu, meist eine einzige BenutzeroberflĂ€che zu verwenden. Anwender, die sich mit der Materie gut auskennen, könnten die Gemeinsamkeiten leicht abbilden. Und wer sich fĂŒr Details auf niedriger Ebene interessiert, der kĂŒmmert sich normalerweise genug, um den Code zu lesen.

Was Ihre spezielle Frage betrifft, lesen Sie richtig, dass der Parameter n_estimators im sklearn-Wrapper-Code [1] num_boost_round innerhalb von train [2] zugeordnet ist. Aber warum möchten Sie als Endbenutzer ein Sklearn-Wrapper-Objekt auf diese Weise hacken? Um dies kontrollierbar zu machen, mĂŒssten Sie den Wrapper-Code ziemlich gut kennen.

[1] https://github.com/dmlc/xgboost/blob/2859c190cd0d168df25e2a7ea2b1fd5211ce94f0/python-package/xgboost/sklearn.py#L185
[2] https://github.com/dmlc/xgboost/blob/83e61bf99ec7d01607867b4e281da283230883b1/python-package/xgboost/training.py#L12

Gibt es die gleichen Probleme fĂŒr R?

Am Do, 26. November 2015 um 11:39 Uhr, Vadim Khotilovich <
[email protected]> schrieb:

Hallo Wladimir,

Boosting ist im Allgemeinen ein Meta-Algorithmus, der iterativ (oder in
"Runden") trainiert eine Abfolge einfacher/schwacher Lernender (oder SchÀtzer) in solchen
so dass die gesamte Kombination besser abschneidet. Es könnten verschiedene sein
Arten von schwachen Lernenden, nicht nur BĂ€ume. ZB hat xgboost BĂ€ume und
(verallgemeinerte) lineare Modelloptionen. Seltsamerweise sind diese schwachen Lernenden in
xgboost werden als "Booster" bezeichnet und das gesamte Kombinationsmodell ist
als "Lerner" bezeichnet. Das hat mich anfangs etwas verwirrt
das Lesen der Dokumente und des Codes von xgboost, da es irgendwie umgekehrt zu meiner eigenen MentalitÀt war
Impressum der Terminologie.

Es wÀre zwar schön, eine einheitliche Nomenklatur zwischen verschiedenen zu haben
Projekte, die sich auf das gleiche Thema beziehen und ein konstant hohes
hochwertige Cross-Link-Dokumentation, es ist nicht immer machbar oder einfach
wartbar, insbesondere in Open-Source-Projekten. AnfÀnger neigen dazu,
verwenden meist eine einzige Schnittstelle. Anwender, die sich mit dem Thema gut auskennen
Materie wÀre leicht in der Lage, die Gemeinsamkeiten abzubilden. Und wen es interessiert
um Details auf niedriger Ebene kĂŒmmern sie sich normalerweise genug, um den Code zu lesen.

Was Ihre spezifische Frage betrifft, lesen Sie richtig, dass die n_estimators
Parameter im sklearn-Wrapper-Code [1] wird num_boost_round innerhalb . zugeordnet
Zug [2]. Aber warum möchten Sie als Endbenutzer ein Sklearn hacken?
Wrapper-Objekt so? Um dies kontrollierbar zu tun, mĂŒssten Sie
um den Wrapper-Code ziemlich gut kennenzulernen.

[1]
https://github.com/dmlc/xgboost/blob/2859c190cd0d168df25e2a7ea2b1fd5211ce94f0/python-package/xgboost/sklearn.py#L185
[2]
https://github.com/dmlc/xgboost/blob/83e61bf99ec7d01607867b4e281da283230883b1/python-package/xgboost/training.py#L12

—
Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHub an
https://github.com/dmlc/xgboost/issues/651#issuecomment -159956213.

@khotilov , danke fĂŒr die ErklĂ€rung. Es reicht fĂŒr meine BedĂŒrfnisse und ich schließe das Ticket.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

yananchen1989 picture yananchen1989  Â·  3Kommentare

RanaivosonHerimanitra picture RanaivosonHerimanitra  Â·  3Kommentare

trivialfis picture trivialfis  Â·  3Kommentare

nicoJiang picture nicoJiang  Â·  4Kommentare

uasthana15 picture uasthana15  Â·  4Kommentare