34

objectiveR中的xgboost和fevalin有什么区别?我知道这是非常基本的事情,但我无法准确定义它们/它们的目的。

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

4

1 回答 1

60

客观的

Objectiveinxgboost是学习算法将尝试优化的函数。根据定义,它必须能够根据给定训练轮次的预测创建一阶(梯度)和二阶(粗麻布)导数。

自定义Objective函数示例: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))
}

这是训练的关键功能,没有xgboost定义一个模型就无法训练。Objective函数直接用于在每棵树的每个节点处进行拆分。

feval

fevalin xgboost在直接优化或训练模型中没有任何作用。你甚至不需要一个人来训练。不影响拆分。它所做的只是在模型训练后对其进行评分。看一个自定义的例子feval

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

注意,它只返回一个名称(度量)和一个分数(值)。通常fevalobjective可能是相同的,但您想要的评分机制可能有点不同,或者没有衍生品。例如,人们使用 loglossobjective进行训练,但创建 AUCfeval来评估模型。

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

您不需要feval函数来训练模型。只是对它进行评估,并帮助它尽早停止训练。

概括:

Objective是主要的主力。

feval是允许xgboost做一些很酷的事情的助手。

softmaxobjective多类分类中常用的函数。它确保您的所有预测总和为 1,并使用指数函数进行缩放。软最大

于 2015-12-15T17:19:38.897 回答