xgboost中客观和发烧之间的r差异



R中xgboost中的objectivefeval之间有什么区别?我知道这是一件非常基本的事情,但我无法准确地定义它们/它们的目的。

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

目标

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

自定义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模型,就无法训练该模型。CCD_ 7函数直接用于在每个树中的每个节点进行拆分。

发烧

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

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

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

训练模型不需要feval函数。只是为了评估它,并帮助它尽早停止训练。

摘要:

Objective是主要的主力军。

CCD_ 19是一个帮助CCD_ 20做一些很酷的事情的工具。

CCD_ 21是一个常用于多类分类的CCD_。它可以确保所有预测的总和为1,并使用指数函数进行缩放。softmax

相关内容

  • 没有找到相关文章

最新更新