objective
和feval
在R中的xgboost有什么区别?我知道这是非常基础的问题,但我无法准确地定义它们/它们的目的。
另外,在进行多类分类时,什么是softmax目标函数?
objective
和feval
在R中的xgboost有什么区别?我知道这是非常基础的问题,但我无法准确地定义它们/它们的目的。
另外,在进行多类分类时,什么是softmax目标函数?
目标
xgboost
中的Objective
是学习算法尝试优化的函数。根据定义,它必须能够在给定训练轮次时创建预测的一阶(梯度)和二阶(海森)导数。
一个自定义的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
模型都无法训练。 Objective
函数直接用于每棵树中每个节点的分裂。
feval
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))
}
请注意,它只返回一个名称(metric)和一个分数(value)。
通常feval
和objective
可能是相同的,但也许你想要一种略有不同或没有导数的评分机制。例如,人们使用logloss objective
来训练,但创建了一个AUC feval
来评估模型。
此外,您可以使用feval
停止模型训练,一旦停止改进。并且您可以使用多个feval
函数以不同的方式对模型进行评分,并观察它们所有的结果。
您不需要一个feval
函数来训练一个模型,只需要用它来评估并帮助它尽早停止训练。
总结:
Objective
是主要的工具。
feval
是一个辅助工具,使xgboost
能够做一些很酷的事情。
softmax
是一个在多类分类中常用的objective
函数。它确保所有的预测值总和为1,并使用指数函数进行缩放。softmax