Die von Friedman vorgeschlagene Erhöhung des Gradientenbaums verwendet Entscheidungsbäume mit J
Endknoten (= Blätter) als Basislerner. Es gibt eine Reihe von Möglichkeiten, einen Baum mit genau J
Knoten 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 J
endständigen Knoten für die Erhöhung des Gradientenbaums zu züchten ?
Ich habe das Baumwachstumsverfahren von Rs gbm
Paket 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?
gbm
hat einen Parametern.minobsinnode
, der die Mindestanzahl von Objekten pro Knoten steuert. Natürlich ist dann die Anzahl der Knoten kleiner oder gleich NumberOfPoints / n.minobsinnodeAntworten:
Die Lösung in Rs
gbm
ist keine typische.Andere Pakete, wie
scikit-learn
oderLightGBM
verwenden 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.ii i
quelle