7

我想知道哪个损失函数使用 XGBoost 进行多类分类。我在这个问题中发现了二元情况下逻辑分类的损失函数。

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

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

先感谢您。

4

2 回答 2

7

正如您所怀疑的,用于多类的损失函数是 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

于 2018-05-15T15:10:22.773 回答
-1

一个很好的例子是:

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

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

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

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

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

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

于 2017-03-01T20:11:42.683 回答