Я пытаюсь реализовать свою собственную функцию потери для многоклассовой проблемы в 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
?