Es gibt viele Blog-Posts, YouTube-Videos usw. über die Idee , Bäume zu fangen oder zu vermehren . Mein allgemeines Verständnis ist, dass der Pseudocode für jedes ist:
Absacken:
- Nehmen Sie N zufällige Stichproben von x% der Stichproben und y% der Merkmale
- Passen Sie Ihr Modell (z. B. Entscheidungsbaum) an jedes von N an
- Vorhersage mit jedem N
- Mitteln Sie die Vorhersagen, um die endgültige Vorhersage zu erhalten
Erhöhen:
- Passen Sie Ihr Modell (z. B. Entscheidungsbaum) an Ihre Daten an
- Holen Sie sich die Reste
- Passen Sie Ihr Modell an die Residuen an
- Gehen Sie zu 2 für N Auffrischungsrunden
- Die endgültige Vorhersage ist eine gewichtete Summe der sequentiellen Prädiktoren.
Ich werde alle Klarstellungen zu meinem Verständnis oben nehmen, aber meine beabsichtigte Frage lautet wie folgt:
Sowohl XGBoost als auch LightGBM haben Parameter, die das Absacken ermöglichen. Die Anwendung ist nicht Bagging OR Boosting (worüber in jedem Blog-Beitrag gesprochen wird), sondern Bagging AND Boosting. Was ist der Pseudocode für wo und wann das kombinierte Absacken und Boosten stattfindet?
Ich habe erwartet, dass es "Bagged Boosted Trees" ist, aber es scheint, dass es "Boosted Bagged Trees" ist. Der Unterschied scheint erheblich zu sein.
Eingesackte verstärkte Bäume:
- Nehmen Sie N zufällige Stichproben von x% der Stichproben und y% der Merkmale
- Passen Sie Boosted-Bäume an jede der N Proben an
- Vorhersage mit jedem N
- Mitteln Sie die Vorhersagen, um die endgültige Vorhersage zu erhalten
Dies scheint der beste Weg zu sein. Immerhin ist das Risiko beim Boosten eine Überanpassung, und der Hauptvorteil des Einsackens besteht darin, die Überanpassung zu reduzieren. Es scheint eine großartige Idee zu sein, ein paar geboosterte Modelle einzusacken.
Doch von der Suche, zum Beispiel durch die scikit-learn
gradient_boosting.py (die Probe Absacken des Fall ist, aber nicht zufällig Merkmalsauswahl), und zusammen ein paar kleine Nuggets über Beiträge über LightGBM und XGBoost Schuster, sieht es aus wie XGBoost und LightGBM Arbeit wie folgt:
Gepackte Bäume:
- Passen Sie einen Entscheidungsbaum an Ihre Daten an
- Für i in N Auffrischungsrunden:
- Holen Sie sich die Reste
- wenn ich bag_frequency == 0 mod (dh bag alle 5 Runden):
- Nehmen Sie eine einzelne Zufallsstichprobe von x% der Stichproben und y% der Merkmale. benutze diese zufällige Stichprobe für die Zukunft
- Passen Sie den Baum an die Reste an
- Die endgültige Vorhersage ist eine gewichtete Summe der sequentiellen Prädiktoren.
Bitte korrigieren Sie mein Verständnis hier und tragen Sie die Details ein. Boosted Bagged Tree (mit nur 1 zufälligen Baum pro bag_frequency) scheint nicht so mächtig zu sein wie Bagged Boosted Tree.
Antworten:
Instanzen werden in Bagging wiederholt unterabgetastet , jedoch nicht in Features. ( RandomForests , XGBoost und CatBoost machen beides):
Fügen Sie einen Initialisierungsschritt in Ihren Boosting- Pseudocode ein, um die Redundanz zu beseitigen:
Bagged Boosted Trees (wie Sie es nennen) sind sicherlich ein vernünftiger Ansatz, unterscheiden sich aber von XGBoost oder CatBoost :
XGBoost und CatBoost basieren beide auf Boosting und verwenden die gesamten Trainingsdaten. Sie implementieren auch das Absacken durch einmaliges Unterabtasten in jeder Boosting-Iteration:
Wenn Sie "Modell an Residuen anpassen" beibehalten möchten, entspricht dies "Modell an Residuen von Daten im Bootstrap-Beispiel anpassen ".
Weitere Bemerkungen :
Wie Sie vorschlagen, gibt es keinen " besten Weg " (kein Satz über freies Mittagessen). "Bagged Boosted Trees" übertreffen möglicherweise XGBoost in bestimmten Datensätzen.
Diese Zeile ist verwirrend. Woher hast du das?
Dies sollte in Ihrem Pseudocode nicht erwähnt werden. Besonders wenn andere, wichtigere Parameter ausgelassen werden (wie die Lernrate beim Boosten).
quelle