Quelle est la différence entre objective
et feval
dans xgboost dans R? Je sais que c'est quelque chose de très fondamental mais je ne suis pas en mesure de les définir exactement/leur but.
Aussi, qu'est-ce qu'un objectif softmax, tout en faisant une classification multi-classes?
Objectif
Objective
dans xgboost
est la fonction que l'algorithme d'apprentissage tentera d'optimiser. Par définition, il doit être capable de créer des dérivées 1er (gradient) et 2e (hessian) w.r.t. les prévisions à un tour de formation donné.
Un exemple de fonction Objective
personnalisé: 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))
}
Il s'agit de la fonction critique de la formation et aucun modèle xgboost
ne peut être formé sans en définir un. Les fonctions Objective
sont directement utilisées pour le fractionnement à chaque nœud de chaque arborescence.
feval
feval
dans xgboost
ne joue aucun rôle dans l'optimisation ou la formation directe de votre modèle. Vous n'en avez même pas besoin pour vous entraîner. Cela n'a pas d'impact sur le fractionnement. Tout ce qu'il fait, c'est marquer votre modèle APRÈS qu'il s'est entraîné. Un exemple d'un exemple personnalisé feval
evalerror <- function(preds, dtrain) {
labels <- getinfo(dtrain, "label")
err <- as.numeric(sum(labels != (preds > 0)))/length(labels)
return(list(metric = "error", value = err))
}
Remarquez, il retourne juste un nom (métrique) et un score (valeur). En règle générale, feval
et objective
peuvent être identiques, mais le mécanisme de notation que vous souhaitez est peut-être un peu différent ou n'a pas de dérivé. Par exemple, les gens utilisent la perte de journal objective
pour s'entraîner, mais créent une AUC feval
pour évaluer le modèle.
De plus, vous pouvez utiliser le feval
pour empêcher votre modèle de s'entraîner une fois qu'il cesse de s'améliorer. Et vous pouvez utiliser plusieurs fonctions feval
pour évaluer votre modèle de différentes manières et les observer toutes.
Vous n'avez pas besoin d'une fonction feval
pour entraîner un modèle. Seulement pour l'évaluer et l'aider à arrêter la formation tôt.
Résumé:
Objective
est le cheval de bataille principal.
feval
est une aide pour permettre à xgboost
de faire des choses sympas.
softmax
est une fonction objective
couramment utilisée dans la classification multi-classes. Il garantit que toutes vos prédictions se résument à un et sont mises à l'échelle à l'aide de la fonction exponentielle. softmax