2015-12-09 4 views
22

Qual è la differenza tra Objective e feval in xgboost in R? So che questo è qualcosa di molto fondamentale, ma non sono in grado di definirli esattamente/il loro scopo. Inoltre, qual è l'obiettivo di softmax, mentre si effettua la classificazione multi-classe?Differenza tra Objective e feval in xgboost

risposta

34

Obiettivo

Objective nel xgboost è la function cui l'algoritmo di apprendimento cercherà di ottimizzare. Per definizione, deve essere in grado di creare derivati ​​1a (gradiente) e 2a (hessiana) con un numero le previsioni in un determinato round di allenamento.

Un'usanza Objective funzione di esempio: link

# user define objective function, given prediction, return gradient and second order gradient 
# this is loglikelihood loss 
logregobj <- function(preds, dtrain) { 
    labels <- getinfo(dtrain, "label") 
    preds <- 1/(1 + exp(-preds)) 
    grad <- preds - labels 
    hess <- preds * (1 - preds) 
    return(list(grad = grad, hess = hess)) 
} 

Questa è la funzione fondamentale per la formazione e nessun modello xgboost può essere addestrato senza definire uno. Le funzioni Objective vengono utilizzate direttamente nella divisione di ogni nodo in ogni albero.

feval

feval in xgboost gioca alcun ruolo nella ottimizzazione o di formazione il vostro modello direttamente. Non hai nemmeno bisogno di uno per allenarsi. Non ha impatto sulla divisione. Tutto ciò che fa è segnare il tuo modello DOPO che si è allenato. Uno sguardo ad un esempio di una consuetudine feval

evalerror <- function(preds, dtrain) { 
    labels <- getinfo(dtrain, "label") 
    err <- as.numeric(sum(labels != (preds > 0)))/length(labels) 
    return(list(metric = "error", value = err)) 
} 

Avviso, semplicemente restituisce un nome (metrica) e un punteggio (valore). Tipicamente lo feval e lo objective potrebbero essere uguali, ma forse il meccanismo di punteggio che si desidera è un po 'diverso o non ha derivati. Ad esempio, le persone usano il logloss objective per allenarsi, ma creano un AUC feval per valutare il modello.

Inoltre, è possibile utilizzare feval per interrompere l'allenamento del modello una volta che si è interrotto. E puoi usare più funzioni feval per segnare il tuo modello in modi diversi e osservarli tutti.

Non è necessaria la funzione feval per addestrare un modello. Solo per valutarlo e aiutarlo a smettere di allenarsi presto.

Sommario:

Objective è il cavallo di battaglia principale.

feval è un aiuto per consentire a xgboost di fare cose interessanti.

softmax è una funzione objective comunemente utilizzata nella classificazione multi-classe. Assicura che tutte le tue previsioni sommano a una, e sono ridimensionate usando la funzione esponenziale. softmax