我正在尝试针对XGBoost中的多类问题实现自己的自定义损失函数。首先,我想复制multi:softprob
的行为。我在R中的代码:
softmaxobj=function(preds,dtrain){
labels <- getinfo(dtrain, "label")
labels=model.matrix(~factor(labels))
preds=apply(preds,1,function(x){exp(x)/sum(exp(x))})
grad=preds-labels
hess=2*preds*(1-preds)
return(list(grad = as.numeric(grad), hess = as.numeric(hess)))
}
但是,在调试之后,我发现preds参数返回一个向量,而不是带有标签长度和全0值的矩阵(正如我所期望的)。这是为什么?我在哪里可以找到原始的multi:softprob
代码?