Пользовательская функция потерь XGBoost мультикласс - PullRequest
2 голосов
/ 06 января 2020

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

...