Könnte jemand erklären, wie die Spalte Quality
im xgboost R-Paket in der xgb.model.dt.tree
-Funktion berechnet wird?Wie wird die Qualität von xgboost berechnet?
In der Dokumentation heißt es, dass Quality
"ist die Verstärkung in Bezug auf die Aufteilung in diesem spezifischen Knoten".
Wenn Sie den folgenden Code ausführen, für diese Funktion in der xgboost Dokumentation gegeben, Quality
für Knoten 0 von Baum 0 4000,53, aber ich berechnen die Gain
als 2002,848
data(agaricus.train, package='xgboost')
train <- agarics.train
X = train$data
y = train$label
bst <- xgboost(data = train$data, label = train$label, max.depth = 2,
eta = 1, nthread = 2, nround = 2,objective = "binary:logistic")
xgb.model.dt.tree([email protected][[2]], model = bst)
p = rep(0.5,nrow(X))
L = which(X[,'odor=none']==0)
R = which(X[,'odor=none']==1)
pL = p[L]
pR = p[R]
yL = y[L]
yR = y[R]
GL = sum(pL-yL)
GR = sum(pR-yR)
G = sum(p-y)
HL = sum(pL*(1-pL))
HR = sum(pR*(1-pR))
H = sum(p*(1-p))
gain = 0.5 * (GL^2/HL+GR^2/HR-G^2/H)
gain
Ich verstehe, dass Gain
gegeben durch die folgende Formel:
Da wir log Verlust verwenden, G ist die Summe aus p-y
und H ist die Summe von p(1-p)
- Gamma und Lambda in diesem Fall sind beide Null.
Kann jemand identifizieren, wo ich falsch liege?
Dank
Mann das hat mich ein bisschen gestört .. Ich werde durcharbeiten, aber ich bin beeindruckt .. Sie sollten sich diese Frage ansehen, da es scheint, als ob Sie xgboost innerhalb von oout lernen. Es war ärger mich für eine Weile..http: //stackoverflow.com/questions/32950607/how-to-access-weighting-of-indiviual-decision-trees-in-xgboost –
Ich konnte sehen, dass der 1/2 Faktor warn ' t angewendet, sollte aber die Standardwerte im Quellcode überprüfen. Gute Arbeit! –
Froh, geholfen zu haben! Es ist ein phänomenaler Algorithmus, der aus den ersten Prinzipien so gut zu verstehen ist. – dataShrimp