【问题标题】:Which is the loss function for multi-class classification in XGBoost?XGBoost 中多类分类的损失函数是什么?
【发布时间】:2017-06-18 10:08:02
【问题描述】:

我想知道哪个损失函数使用 XGBoost 进行多类分类。我找到了in this question二进制情况下逻辑分类的损失函数。

我认为对于多类情况,它可能与 GBM(对于 K 类)which can be seen here 相同,如果 x 的标签为 k,则 y_k=1,在任何其他情况下为 0,并且 p_k(x ) 是 softmax 函数。但是,我使用此损失函数进行了一阶和二阶梯度,并且粗麻布与代码 here(在 SoftmaxMultiClassObj 中的函数 GetGradient 中)中定义的不匹配,常数为 2。

你能告诉我使用的是哪个损失函数吗?

提前谢谢你。

【问题讨论】:

    标签: xgboost multiclass-classification


    【解决方案1】:

    正如您所怀疑的,用于多类的损失函数是 softmax 目标函数。到目前为止,多类的唯一选项显示在下面的引用中,multi:softprob 返回所有概率,而不是仅返回最可能类的概率。

    “multi:softmax” – 设置 XGBoost 使用 softmax 目标进行多类分类,您还需要设置 num_class(类数)

    “multi:softprob”——和softmax一样,但是输出一个ndata * nclass的向量,可以进一步reshape成ndata,nclass矩阵。结果包含每个数据点属于每个类的预测概率。

    见https://xgboost.readthedocs.io/en/latest//parameter.html#learning-task-parameters。

    【讨论】:

      【解决方案2】:

      下面给出了一个很好的例子:

      http://machinelearningmastery.com/avoid-overfitting-by-early-stopping-with-xgboost-in-python/

      基本上,您可以使用“eval_metric”参数定义损失函数。 (回归默认为 rmse,分类默认为 error)

      官方github repo中给出了“error”函数的描述:

      ""error":二分类错误率,计算公式为#(wrong cases)/#(all case)。对于预测,评估会将预测值大于0.5的实例视为正实例,而其他的作为否定实例。”

      还可以在https://github.com/dmlc/xgboost/blob/master/doc/parameter.md 的“学习任务参数”部分找到完整的评估指标列表

      希望能回答你的问题,祝你好运,

      【讨论】:

      • 您描述的是评估指标,而不是损失函数。前者用于评估性能,而后者实际用于拟合模型。
      猜你喜欢
      • 1970-01-01
      • 2020-04-30
      • 2018-10-27
      • 2019-03-16
      • 2019-04-05
      • 1970-01-01
      • 2020-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多