Wie wird die xgboost-Qualität berechnet?
Könnte jemand erklären, wie dasQuality
ie Spalte @ im Paket xgboost R wird in der Spalte @ berechnexgb.model.dt.tree
Funktion?
In der Dokumentation steht, dassQuality
"ist die Verstärkung, die sich auf die Aufteilung in diesem bestimmten Knoten bezieht."
Wenn Sie den folgenden Code ausführen, der in der xgboost-Dokumentation für diese Funktion angegeben ist,Quality
für Knoten 0 von Baum 0 ist 4000,53, aber ich berechne dieGain
as 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(agaricus.train$data@Dimnames[[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 dasGain
wird durch die folgende Formel gegeben:
Da wir log loss verwenden, ist G die Summe vonp-y
und H ist die Summe vonp(1-p)
- Gamma und Lambda sind in diesem Fall beide Null.
ann jemand erkennen, wo ich falsch lieg
Vielen Dan