Wie wird die xgboost-Qualität berechnet?

Könnte jemand erklären, wie dasQualityie 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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage