XGBoost的损失函数和评价指标
Posted
技术标签:
【中文标题】XGBoost的损失函数和评价指标【英文标题】:The loss function and evaluation metric of XGBoost 【发布时间】:2019-04-30 23:52:52 【问题描述】:我现在对XGBoost
中使用的损失函数感到困惑。以下是我感到困惑的地方:
-
我们有
objective
,这是需要最小化的损失函数; eval_metric
:用于表示学习结果的度量。这两者是完全不相关的(如果我们不考虑分类,只有logloss
和mlogloss
可以用作eval_metric
)。它是否正确?如果我是,那么对于分类问题,如何使用rmse
作为性能指标?
以objective
的两个选项为例,reg:logistic
和binary:logistic
。对于 0/1 分类,通常应该将二元逻辑损失或交叉熵视为损失函数,对吗?那么这两个选项中的哪一个是针对这个损失函数的,另一个的值是多少呢?说,如果binary:logistic
代表交叉熵损失函数,那么reg:logistic
是做什么的?
multi:softmax
和multi:softprob
有什么区别?他们是否使用相同的损失函数,只是输出格式不同?如果是这样,reg:logistic
和 binary:logistic
也应该是一样的,对吧?
第二个问题的补充
比如说,0/1 分类问题的损失函数应该是
L = sum(y_i*log(P_i)+(1-y_i)*log(P_i))
。所以如果我需要在这里选择binary:logistic
,或者reg:logistic
让xgboost分类器使用L
损失函数。如果是binary:logistic
,那么reg:logistic
使用什么损失函数?
【问题讨论】:
***.com/questions/48280873/… @JoshuaCook,它用 Keras 解释了第一个问题。 是的,但您的第一个问题本质上是概念性的,并非特定于图书馆。 reg:logistic 通常将成本函数计算为 (y - y_pred)^2 并在样本维度上取平均值。 【参考方案1】:'binary:logistic' 使用-(y*log(y_pred) + (y-1)*(log(1-y_pred)))
'reg:logistic' 使用 (y - y_pred)^2
为了得到误差的总估计,我们将所有误差相加并除以样本数。
您可以在基础知识中找到它。在查看线性回归与逻辑回归时。
线性回归使用(y - y_pred)^2
作为成本函数
逻辑回归使用-(y*log(y_pred) + (y-1)*(log(1-y_pred)))
作为成本函数
评估指标是完全不同的东西。他们设计来评估您的模型。你可能会被它们弄糊涂,因为在回归问题中使用一些与损失函数相同的评估指标是合乎逻辑的,比如MSE
。然而,在二进制问题中,查看logloss
并不总是明智的。我的经验认为我(在分类问题中)一般会关注AUC ROC
。
编辑
根据 xgboost 文档:
reg:linear:线性回归
reg:logistic:逻辑回归
binary:logistic:二元分类的逻辑回归,输出 概率
所以我猜:
reg:linear: 正如我们所说,(y - y_pred)^2
reg:logistic 是 -(y*log(y_pred) + (y-1)*(log(1-y_pred)))
并以 0.5 阈值四舍五入预测
binary:logistic 是普通的-(y*log(y_pred) + (1-y)*(log(1-y_pred)))
(返回概率)
您可以对其进行测试,看看它是否按照我编辑的方式运行。如果是这样,我会更新答案,否则,我会删除它:
【讨论】:
感谢您的回复。听起来reg:logistic
使用rmse
作为损失(成本)函数,这在reg:linear
中更直观。我不明白为什么在逻辑回归中,为什么仍然使用 rmse
,使得 y-y_pred
等于 1、0、-1。
@BsHe Mate 我想我错了。我会编辑,你可以检查一下,如果是,我会修复答案
我认为我们应该保留编辑;包作者的回答似乎证实了这一点github.com/dmlc/xgboost/issues/521#issuecomment-144453618。但我会等着看其他人是否给出更可靠的答案。
@EranMoshe 你能确认一下 logloss 的后半部分是否为 y-1 吗?我认为应该是 1 年
@ParadiN 对不起,伙计。它应该是 1-y(因为我们知道 y 在 [0, 1) 中)。【参考方案2】:
-
是的,损失函数和评估指标有两个不同的用途。模型使用损失函数来学习输入和输出之间的关系。评估指标用于评估学习关系的好坏。以下是模型评估讨论的链接:https://scikit-learn.org/stable/modules/model_evaluation.html
我不确定您在这里问的是什么。你能澄清一下这个问题吗?
【讨论】:
我为第二个问题添加了一些补充,谢谢。 仍然没有关注您的问题。你在什么背景下问这些? 让我把它简单化。objective:'binary:logistic'
使用什么损失函数,objective:'reg:logistic'
使用什么损失函数以上是关于XGBoost的损失函数和评价指标的主要内容,如果未能解决你的问题,请参考以下文章
R语言构建xgboost模型:自定义损失函数(目标函数loss functionobject function)评估函数(evaluation function)