xgboost

时间:2015-12-09 11:58:50

标签: r classification xgboost

R中xgboost中Objective和feval的区别是什么?我知道这是非常基本的东西,但我无法准确定义它们/它们的目的。另外,什么是softmax目标,同时进行多类分类?

1 个答案:

答案 0 :(得分:47)

<强>目标

Objective中的{p> xgboost是学习算法将尝试和优化的function。根据定义,它必须能够创建第一个(渐变)和第二个(粗麻布)衍生物w.r.t.在给定的训练轮次中的预测。

自定义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

feval中的{p> 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可能相同,但也许您想要的评分机制略有不同,或者没有衍生品。例如,人们使用log objective来训练,但创建AUC feval来评估模型。

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

您不需要feval功能来训练模型。只评估它,并帮助它尽早停止训练。

<强> 要点:

Objective是主要的主力。

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

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