2016-09-08 27 views
1

Jedes Mal, wenn ich xgboost (nicht nur mit Python) verwendet habe, enthalten die Trainingsnachrichten immer "0 beschnittene Knoten" in jeder Zeile. Zum Beispiel:Ausgabe etwas anderes als '0 beschnittene Knoten'

import pandas as pd 
from sklearn import datasets 
import xgboost as xgb 
iris = datasets.load_iris() 
dtrain = xgb.DMatrix(iris.data, label = iris.target) 
params = {'max_depth': 10, 'min_child_weight': 0, 'gamma': 0, 'lambda': 0, 'alpha': 0} 
bst = xgb.train(params, dtrain) 

Die Ausgabe enthält eine lange Liste von Aussagen wie

[11:08:18] src/tree/updater_prune.cc:74: tree pruning end, 1 roots, 16 extra nodes, 0 pruned nodes, max_depth=5 

ich mit mehreren Kombinationen von Tuning-Parametern gespielt habe, aber ich habe immer diese „0 beschnitt Knoten“ -Meldung. Wie kann ich eine Situation erzeugen, in der ich einige beschnittene Knoten bekomme?

+0

Haben Sie versucht, min_child_weight auf eine große Zahl zu erhöhen? Sagen wir, 10% der Anzahl der Proben in Ihrem Datensatz? –

Antwort

0

Sie haben Knoten mit Regularisierung bereinigt! Verwenden Sie den Parameter gamma!

Die Zielfunktionen bestehen aus zwei Teilen: Trainingsverlust und Regularisierung. Die Regularisierung in XGBoost durch drei Parameter gesteuert: alpha, lambda und gamma (doc):

alpha [default = 0] L1 Regularisierungsterm auf Gewichte, erhöhen diese Wert Modell konservativer machen.

Lambda [Standard = 1] L2 Regularisierung Begriff auf Gewichte, erhöhen Sie diese Wert wird Modell konservativer machen.

gamma [default = 0] minimale Verlustreduzierung erforderlich, um eine weitere Partition auf einem Blattknoten des Baums zu erstellen. Je größer, desto mehr konservativ wird der Algorithmus sein. Bereich: [0, ∞]

alpha und beta nur L1 und L2 Strafen auf die Gewichte sind und beeinflussen nicht beschneiden.

ABER gamma ist der Parameter, der eingestellt werden soll, um beschnittene Knoten zu erhalten. Sie sollten es erhöhen, um beschnittene Knoten zu erhalten. Achten Sie darauf, dass es abhängig von der Zielfunktion ist und dass ein Wert von 10000 oder mehr erforderlich sein kann, um beschnittene Knoten zu erhalten. Tuning Gamma ist großartig! es wird XGBoost zusammenlaufen lassen! Dies bedeutet, dass sich nach einer bestimmten Anzahl von Iterationen die Trainings- und Testzahlung in den folgenden Iterationen nicht ändert (alle Knoten der neuen Bäume werden abgeschnitten). Am Ende ist es ein großartiger Wechsel zur Kontrolle der Überfüllung!

Siehe Introduction to Boosted Trees, um die genaue Definition von gamma zu erhalten.

Verwandte Themen