R中xgboost中的objective
和feval
之间有什么区别?我知道这是一件非常基本的事情,但我无法准确地定义它们/它们的目的。
此外,在进行多类别分类时,什么是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))
}
注意,它只返回一个名称(度量)和一个分数(值)。通常,feval
和objective
可能是相同的,但可能你想要的评分机制有点不同,或者没有导数。例如,人们使用logloss objective
进行训练,但创建AUC feval
来评估模型。
此外,一旦模型停止改进,您可以使用feval
来停止训练。您可以使用多个feval
函数以不同的方式为您的模型打分,并观察它们。
训练模型不需要feval
函数。只是为了评估它,并帮助它尽早停止训练。
摘要:
Objective
是主要的主力军。
CCD_ 19是一个帮助CCD_ 20做一些很酷的事情的工具。
CCD_ 21是一个常用于多类分类的CCD_。它可以确保所有预测的总和为1,并使用指数函数进行缩放。softmax