Qualcuno potrebbe spiegare come la colonna Quality
nel pacchetto xgboost R viene calcolata nella funzione xgb.model.dt.tree
?Come viene calcolata la qualità xgboost?
Nella documentazione si dice che Quality
"è il guadagno relativo alla divisione in questo nodo specifico".
Quando si esegue il codice seguente, data nella documentazione xgboost per questa funzione, Quality
per il nodo 0 di albero 0 è 4000,53, eppure io calcolare il Gain
come 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
Capisco che Gain
è dato dalla seguente formula:
dal momento che stiamo usando la perdita di registro, G è la somma di p-y
e H è la somma di p(1-p)
- gamma e lambda in questo caso sono entrambi zero.
Qualcuno può identificare dove sto andando male?
Grazie
uomo questo mi ha infastidito un po '.. ci sto lavorando ma sono impressionato .. dovresti dare un'occhiata a questa domanda dato che sembra che tu stia imparando xgboost dentro oout .. è stato mi infastidisce per un po 'di tempo..http: //stackoverflow.com/questions/32950607/how-to-access-weighting-of-indiveual-decision-trees-in-xgboost –
Ho potuto vedere che il fattore 1/2 wasn' t applicato ma dovrebbe essere visto i valori predefiniti nel codice sorgente. Bel lavoro! –
Felice di aver aiutato! È un algoritmo fenomenale, quindi vale la pena comprenderlo dai primi principi. – dataShrimp