xgboost中Objective和feval之间的差异

    xiaoxiao2022-07-02  93

    原文地址:https://stackoverflow.com/questions/34178287/difference-between-objective-and-feval-in-xgboost

    Objective

    xgboost中的Objective是算法将尝试和优化的函数。根据定义,它必须能够针对给定训练轮次的预测创建一阶(gradient)和二阶(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) returnlist(grad = grad,hess = hess)) }

    Objective是训练的关键函数,任何xgboost模型都需要定义它才能训练。Objective函数直接用于每个树中的每个节点处的拆分过程。

    feval

    xgboost中的feval在优化或训练模型方面没有任何的直接作用。你甚至不需要它就能训练。它不会影响分裂。它所做的只是在训练结束后对你的模型进行评分。下面是自定义feval的例子

    evalerror < - function(preds,dtrain){ labels< - getinfo(dtrain,“label”) err < - as.numeric(sum(labels!=(preds> 0)))/ length(labels) returnlist(metric =“error”,value = err)) #译注:metric为名称,value为分数 }

    请注意,它只返回一个名称(metric)和一个分数(value)。通常情况下,feval和objective可能是相同的。但是有时候,你可能需要有点不同的评分机制,或者没有导数。例如,人们使用logloss作为Objective进行训练,但使用AUC 作为feval来评估模型。

    另外,你可以使用feval在模型已经没有改进的时候停止训练。你还可以使用多个feval函数以不同的方式为你的模型打分并观察它们。

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

    最新回复(0)