将更多信息传递到自定义目标函数中

时间:2020-02-03 19:30:30

标签: r xgboost

我现在正在一个项目中,该项目涉及使用R中的xgboost软件包对两臂仿真研究中的右删减时间到事件端点。似乎xgboost软件包没有针对右删减的事件时间数据的内置目标函数,因此我编写了自定义的目标函数,根据 survcomp 打包为

survobj <- function(preds, dtrain) {

  labels <- getinfo(dtrain, "label")

  n <- length(preds)
  r <- rank(labels)

  ita <- preds
  expita <- exp(ita)

  dono <- rep(0, n)
  grad.dono <- rep(0, n)

  for (i in 1:n) {
    dono[i] <- sum(expita[r >= r[i]])
    # derivative of dono
    grad.dono[i] <- sum(t.mod[r >= r[i]] * expita[r >= r[i]])
  }

  # gradient and hessian of the log partial likelihood

  # llk <- -(ita - log(dono))*event ### negative log partial likelihood
  grad <- -(t.mod - grad.dono / dono)*event
  hess <- (dono^2 - grad.dono^2)/ dono^2 * event

  return(list(grad = grad, hess = hess))
}

由于此定制目标功能涉及治疗组和检查指标。我的问题是,是否有任何方法可以将组处理指标和检查索引作为附加参数传递到自定义目标函数中?我发现参数dtrain是DMatrix类,并且可以通过更改DMatrix的结构来携带这些信息,是否有任何方法可以在DMatrix中传递这些信息?

谢谢

Hesen

0 个答案:

没有答案