web-dev-qa-db-fra.com

Différence entre objectif et feval dans xgboost

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?

31
user2393294

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

48
T. Scharf