2015-11-04 16 views
7

Qualcuno potrebbe spiegare come la colonna Cover nel pacchetto xgboost R viene calcolata nella funzione xgb.model.dt.tree?Come viene calcolata la copertura xgboost?

Nella documentazione si dice che la copertura "è una metrica per misurare il numero di osservazioni interessate dalla divisione".

Quando si esegue il seguente codice, fornito nella documentazione xgboost per questa funzione, Cover per il nodo 0 dell'albero 0 è 1628.2500.

data(agaricus.train, package='xgboost') 

#Both dataset are list with two items, a sparse matrix and labels 
#(labels = outcome column which will be learned). 
#Each column of the sparse Matrix is a feature in one hot encoding format. 
train <- agaricus.train 

bst <- xgboost(data = train$data, label = train$label, max.depth = 2, 
       eta = 1, nthread = 2, nround = 2,objective = "binary:logistic") 

#[email protected][[2]] represents the column names of the sparse matrix. 
xgb.model.dt.tree([email protected][[2]], model = bst) 

ci sono 6513 osservazioni nell'insieme di dati treno, quindi chiunque può spiegare perché Cover per il nodo 0 di albero 0 è un quarto di questo numero (1.628,25)?

Inoltre, Cover per il nodo 1 dell'albero 1 è 788.852 - come viene calcolato questo numero?

Qualsiasi aiuto sarebbe molto apprezzato. Grazie.

risposta

12

coperchio è definito in xgboost come:

la somma di secondo gradiente ordine dei dati di allenamento classificati alla foglia , se si tratta di perdita di piazza, questo corrisponde semplicemente al numero di casi in quel ramo . Più profondo nella struttura di un nodo è, abbassare questo metrica sarà

https://github.com/dmlc/xgboost/blob/f5659e17d5200bd7471a2e735177a81cb8d3012b/R-package/man/xgb.plot.tree.Rd Non particolarmente ben documentata ....

Al fine di calcolare la copertura, abbiamo bisogno di conoscere le previsioni in quel punto nell'albero e la seconda derivata rispetto alla funzione di perdita.

Fortunatamente per noi, la previsione per ogni punto di dati (6513 di essi) nel nodo 0-0 nell'esempio è 0,5. Questa è un'impostazione predefinita globale per cui la prima previsione su t = 0 è 0,5.

base_score [default = 0.5] il punteggio previsione iniziale di tutti istanze, polarizzazione globale

http://xgboost.readthedocs.org/en/latest/parameter.html

Il gradiente di logistica binaria (che è la funzione obiettivo) è py, dove p = la tua previsione e y = la vera etichetta.

Pertanto, l'di colore (di cui abbiamo bisogno per questo) è p * (1-p). Nota: l'Iuta può essere determinata senza y, le vere etichette.

Così (portando a casa):

6513 * (.5) * (1 - .5) = 1628,25

Nel secondo albero, le previsioni a quel punto non sono più tutti.5, sp consente di ottenere le previsioni dopo un albero

p = predict(bst,newdata = train$data, ntree=1) 

head(p) 
[1] 0.8471184 0.1544077 0.1544077 0.8471184 0.1255700 0.1544077 

sum(p*(1-p)) # sum of the hessians in that node,(root node has all data) 
[1] 788.8521 

Nota, per lineare (errore al quadrato) regressione della tela di iuta è sempre uno, quindi il coperchio indica quanti esempi si trovano in quella foglia.

Il grande takeaway è che la copertura è definita dall'assia della funzione obiettivo. Un sacco di informazioni là fuori in termini di arrivare al gradiente e hessian della funzione logistica binaria.

Queste diapositive sono utili per capire perché usa gli hessiani come ponderazione e anche spiegare come lo xgboost si divide in modo diverso dagli alberi standard. https://homes.cs.washington.edu/~tqchen/pdf/BoostedTree.pdf

+0

Fantastica spiegazione. Grazie – dataShrimp

+0

Inoltre, non credo che potresti far luce su questa domanda? http://stackoverflow.com/questions/33654479/how-is-xgboost-quality-calculated – dataShrimp

+0

@dtfoster Ho giocato con quell'altra domanda - non ho ancora risolto il problema ... C'è un po 'di peso minore sotto il cofano che ha alcune piccole differenze dalle sue diapositive –

Problemi correlati