XGBoost中Objective和feval的区别

34

objectivefeval在R中的xgboost有什么区别?我知道这是非常基础的问题,但我无法准确地定义它们/它们的目的。

另外,在进行多类分类时,什么是softmax目标函数?

1个回答

61

目标

xgboost中的Objective是学习算法尝试优化的函数。根据定义,它必须能够在给定训练轮次时创建预测的一阶(梯度)和二阶(海森)导数。

一个自定义的Objective函数示例:链接

# 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))
}

这是训练所必需的关键函数,没有定义这个函数,任何xgboost模型都无法训练。 Objective 函数直接用于每棵树中每个节点的分裂。

feval

xgboost 中的 feval 不直接参与模型的优化或训练,甚至不需要它来进行训练。它不会影响分裂过程。它的作用仅在模型训练完成后对模型进行评分。以下是自定义 feval 的示例:

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

请注意,它只返回一个名称(metric)和一个分数(value)。

通常fevalobjective可能是相同的,但也许你想要一种略有不同或没有导数的评分机制。例如,人们使用logloss objective来训练,但创建了一个AUC feval来评估模型。

此外,您可以使用feval停止模型训练,一旦停止改进。并且您可以使用多个feval函数以不同的方式对模型进行评分,并观察它们所有的结果。

您不需要一个feval函数来训练一个模型,只需要用它来评估并帮助它尽早停止训练。

总结:

Objective是主要的工具。

feval是一个辅助工具,使xgboost能够做一些很酷的事情。

softmax是一个在多类分类中常用的objective函数。它确保所有的预测值总和为1,并使用指数函数进行缩放。softmax


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接