我试图知道哪个损失函数使用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。
你能否告诉我使用的损失函数是什么?
提前谢谢。
答案 0 :(得分:5)
用于多类的损失函数,正如您所怀疑的那样,是softmax目标函数。截至目前,多类的唯一选项显示在下面的引文中,multi:softprob
返回所有概率,而不仅仅是最可能类的概率。
“multi:softmax”-set XGBoost使用softmax目标进行多类分类,还需要设置num_class(类的数量)
“multi:softprob” - 与softmax相同,但输出ndata * nclass的向量,可以进一步重新整形为ndata,nclass矩阵。结果包含属于每个类的每个数据点的预测概率。
请参阅https://xgboost.readthedocs.io/en/latest//parameter.html#learning-task-parameters。
答案 1 :(得分:0)
给出了一个很好的例子:
http://machinelearningmastery.com/avoid-overfitting-by-early-stopping-with-xgboost-in-python/
基本上,您可以使用“eval_metric”参数定义损失函数。 (默认为回归的rmse和分类的错误)
官方github repo上给出了“错误”功能的描述:
“”错误“:二进制分类错误率。计算为#(错误情况)/#(所有情况)。对于预测,评估将预测值大于0.5的实例视为正实例,并且其他人是负面的例子。“
可以在https://github.com/dmlc/xgboost/blob/master/doc/parameter.md
的“学习任务参数”部分找到可用的评估指标的完整列表希望能回答你的问题,祝你好运,