【问题标题】:Difference between Objective and feval in xgboostxgboost中Objective和feval的区别
【发布时间】:2016-03-14 16:41:12
【问题描述】:

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

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

【问题讨论】:

    标签: r classification xgboost objective-function evaluation-function


    【解决方案1】:

    目标

    xgboost 中的Objective 是学习算法将尝试优化的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 in 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 可能相同,但您想要的评分机制可能有点不同,或者没有衍生工具。例如,人们使用 logloss objective 进行训练,但创建 AUC feval 来评估模型。

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

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

    总结:

    Objective 是主要的主力。

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

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

    【讨论】:

      猜你喜欢
      • 2017-03-02
      • 1970-01-01
      • 1970-01-01
      • 2016-05-16
      • 2010-10-08
      • 1970-01-01
      • 2010-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多