Baumgröße in Gradientenbaumverstärkung

10

Die von Friedman vorgeschlagene Erhöhung des Gradientenbaums verwendet Entscheidungsbäume mit JEndknoten (= Blätter) als Basislerner. Es gibt eine Reihe von Möglichkeiten, einen Baum mit genau JKnoten zu züchten, zum Beispiel kann man den Baum in der Tiefe zuerst oder in der Breite zuerst züchten, ...

Gibt es eine etablierte Methode, um Bäume mit genau Jendständigen Knoten für die Erhöhung des Gradientenbaums zu züchten ?

Ich habe das Baumwachstumsverfahren von Rs gbmPaket untersucht und es scheint, dass es den Baum in der Tiefe zuerst erweitert und eine auf Fehlerverbesserung basierende Heuristik verwendet, um zu entscheiden, ob der linke oder der rechte untergeordnete Knoten erweitert werden soll - ist das richtig?

Peter Prettenhofer
quelle
2
gbm verwendet CART, um die Bäume zu erstellen, ein bekannter Algorithmus aus den 80ern. Die Heuristik heißt Gini-Verunreinigung, eine ziemlich übliche Wahl für die Regression mit quadratischem Verlust.
2
Afaik Gini Verunreinigung wird für Klassifizierungsprobleme verwendet. Trotzdem bezieht sich die Frage auf die Größe der Bäume.
Peter Prettenhofer
Es wird jeweils ein Zweig hinzugefügt. Ich wäre überrascht, wenn jeder nächste Split der beste der verbleibenden Split-Kandidaten im Baum wäre, nicht nur der Zweig. Es gibt Zeiten, in denen die Daten keine exakte Zahl unterstützen - beispielsweise wenn die Daten für 'J' zu klein sind.
EngrStudent
Wie @EngrStudent sagte, können Sie keine genaue Anzahl von Knoten erzwingen. Sie haben jedoch eine gewisse Kontrolle über eine Obergrenze für die Anzahl der Knoten. gbmhat einen Parameter n.minobsinnode, der die Mindestanzahl von Objekten pro Knoten steuert. Natürlich ist dann die Anzahl der Knoten kleiner oder gleich NumberOfPoints / n.minobsinnode
G5W
Wenn ich nach 'J'-Blättern suchen würde, würde ich den Baum vollständig bauen und dann, vorausgesetzt, es gäbe mehr als J-Blätter, würde ich auf J zurückschneiden. Dies würde mir' J'-Knoten geben, und sie wären die meisten informative Aufteilung - es wäre das gesündeste CART-Modell, das es sein könnte. Wenn es nicht genug Splits gibt, könnte ich nur zufällig innerhalb der Domains aufteilen, um 'J' zu erhalten, aber sie wären falsch und etwas trivial. Ich könnte die Wertverteilung innerhalb des Blattes betrachten und eine CDF-gesteuerte Annäherung verwenden, aber das würde vom Mittelwert-pro-Blatt-Modell abweichen.
EngrStudent

Antworten:

2

Die Lösung in Rs gbmist keine typische.

Andere Pakete, wie scikit-learnoder LightGBMverwenden sogenannte (in Scikit-Learn) BestFirstTreeBuilder, wenn die Anzahl der Blätter begrenzt ist. Es unterstützt eine Prioritätswarteschlange aller Blätter und teilt bei jeder Iteration das Blatt, das die beste Verringerung der Verunreinigung bringt. Es ist also weder die Tiefe noch die Breite zuerst, sondern ein dritter Algorithmus, der auf Berechnungen in den Blättern basiert.

In gewissem Sinne ist dieser Ansatz optimaler, als alle Blätter der Reihe nach blind zu teilen. Es ist jedoch immer noch eine gierige Heuristik, da die Wahl, ob der -te Knoten geteilt werden soll, nur von der ersten Teilung von abhängt und nicht von den möglichen aufeinanderfolgenden Teilungen, die die Verunreinigung viel stärker verringern können als die aktuelle Teilung.iii

David Dale
quelle