XGBoost 的损失函数和评估指标

16

我现在对XGBoost中使用的损失函数感到困惑。以下是我的疑问:

  1. 我们有objective参数,它是需要被最小化的损失函数;eval_metric参数:用于表示学习结果的指标。这两个是完全无关的(如果不考虑分类问题中仅可使用logloss和mlogloss作为eval_metric)。这样说是否正确?那么对于一个分类问题,如何使用rmse作为性能度量呢?
  2. 以两个objective选项为例,reg:logistic和binary:logistic。对于0/1分类问题,通常应该考虑二元逻辑回归损失或交叉熵作为损失函数,对吗?那么这两个选项中哪个是针对这种损失函数的,另一个的值是多少呢?比如说,如果binary:logistic代表交叉熵损失函数,那么reg:logistic做什么呢?
  3. multi:softmax和multi:softprob之间有什么区别?它们使用相同的损失函数,只是输出格式不同吗?如果是这样,那么reg:logistic和binary:logistic也应该是一样的,对吗?

第2个问题的补充说明

假设0/1分类问题的损失函数应该为:

L = sum(y_i*log(P_i)+(1-y_i)*log(P_i))。如果我需要在XGBoost分类器中使用L损失函数,是选择binary:logistic还是reg:logistic呢?如果选择binary:logistic,那么reg:logistic会使用什么样的损失函数?

https://dev59.com/I1YM5IYBdhLWcg3w3S-F - Joshua Cook
@JoshuaCook,它用Keras解释了第一个问题。 - Bs He
是的,但你的第一个问题是概念性的,与库无关。 - Joshua Cook
reg:logistic通常会计算成本函数为(y - y_pred)^2并在样本维度上进行平均。 - Eran Moshe
2个回答

12

'binary:logistic'使用-(y*log(y_pred) + (1-y)*(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)))(返回概率)。

您可以测试一下看看它是否按照我编辑的方式运作。如果是,我将更新答案,否则,我将删除它 :<


1
谢谢你的回复。听起来reg:logistic使用rmse作为损失(成本)函数,这在reg:linear中更直观。我不明白为什么在逻辑回归中仍然使用rmse,以至于y-y_pred等于1、0、-1。 - Bs He
@BsHe Mate,我想我搞错了。我会进行编辑,你可以检查一下,如果没问题的话,我会修正答案。 - Eran Moshe
我认为我们应该保留修改;软件包作者的回答似乎证实了这一点 https://github.com/dmlc/xgboost/issues/521#issuecomment-144453618。但我会等待看看是否有其他人给出更坚实的答案。 - Bs He
@EranMoshe,您能否确认logloss的后半部分是否为y-1?我认为应该是1-y。 - PaladiN
@PaladiN 抱歉伙计。应该是1-y(因为我们知道y在[0,1)之间)。 - Eran Moshe

1
  1. 是的,损失函数和评估指标具有不同的作用。模型使用损失函数来学习输入和输出之间的关系。评估指标用于评估所学习关系的好坏。这里是一个关于模型评估的讨论链接:https://scikit-learn.org/stable/modules/model_evaluation.html
  2. 我不确定你在问什么。你能澄清一下这个问题吗?

我为第二个问题添加了一些补充,谢谢。 - Bs He
仍然不明白你的问题。你是在问哪个上下文的问题? - Joshua Cook
让我简单解释一下。objective:'binary:logistic'使用什么损失函数?而objective:'reg:logistic'又使用了什么呢? - Bs He

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接