Deepsurv 的 MLR3 训练错误(deephit 工作正常)

问题描述 投票:0回答:1

我的代码在 80/20 的训练测试拆分中运行得很好。由于自身原因,我想测试 70/30 分割的性能,但 DeepSurv 给出了错误。虽然之前没有错误,但其他深度生存模型正在两个数据分割(Deephit 和 coxtime)上运行。

错误是

check_prediction_data.PredictionDataSurv(pdata,train_task =任务)中的错误: 对“pdata$crank”的断言失败:包含缺失值(元素 1)。

任何有关导致错误的原因或我应该更改代码的位置的帮助都将受到赞赏。

这是数据框的一小部分

df <- data.frame(
  AGE = c(75.6, 78.9, 63.9),
  PTGENDER = c(2, 1, 1),
  PTEDUCAT = c(16, 16, 18),
  PTETHCAT = c(2, 2, 2),
  PTRACCAT = c(4, 4, 1),
  PTMARRY = c(2, 2, 2),
  CDRSB.bl = c(0, 0.5, 0),
  ADAS11.bl = c(11, 3, 4),
  ADAS13.bl = c(16, 4, 6),
  ADASQ4.bl = c(5, 1, 2),
  MMSE.bl = c(27, 29, 30),
  RAVLT.immediate.bl = c(30, 50, 66),
  RAVLT.learning.bl = c(2, 10, 8),
  RAVLT.forgetting.bl = c(4, 4, 1),
  RAVLT.perc.forgetting.bl = c(57.14286, 26.66667, 6.666667),
  LDELTOTAL.bl = c(14, 13, 13),
  FAQ.bl = c(1, 0, 1),
  Comorbidity_Alcohol.Abuse = c(0, 0, 1),
  Comorbidity_Allergies.or.Drug.Sensitivities = c(1, 1, 1),
  Comorbidity_Cardiovascular = c(1, 0, 0),
  Comorbidity_Dermatologic.Connective.Tissue = c(1, 1, 1),
  Comorbidity_Drug.Abuse = c(0, 0, 0),
  Comorbidity_Renal.Genitourinary = c(1, 1, 2),
  Comorbidity_Respiratory = c(0, 0, 0),
  Comorbidity_Smoking = c(0, 0, 0),
  time = c(72, 24, 24),
  status = c(0, 0, 0)
)

这是我的 MLR 3 代码: 定义任务

task = TaskSurv$new("data",
                    backend = alldata, 
                    time = "time",
                    event = "status")
task$set_col_roles("status", c("target", "stratum"))
split = partition(task, ratio = 0.7, stratify = TRUE)

#define learners
lrn_deepsurv = lrn("surv.deepsurv",
                   dropout = to_tune(0,1),
                   optimizer = to_tune(c("adadelta")),
                   lr = to_tune(0,1)
                   )
lrn_deephit = lrn("surv.deephit",
                   dropout = to_tune(0,1),
                   optimizer = to_tune(c("adadelta")),
                   lr = to_tune(0,1)
                   )

#Hyperparameter tuning
at_deepsurv = auto_tuner(
tuner = tuner,
learner = lrn_deepsurv,
resampling = rsmp("cv", folds = 5),
measure = msr("surv.cindex"),
terminator = trm("evals", n_evals = 100, k = 0)
)
rr_deepsurv = resample(task, at_deepsurv, resampling_outer, store_models = FALSE)
#Save model
lrn_deepsurv_tuned = at_deepsurv
saveRDS(lrn_deepsurv_tuned, "lrn_deepsurv_tuned.rds")

###########################################
at_deephit = auto_tuner(
tuner = tuner,
learner = lrn_deephit,
resampling = rsmp("cv", folds = 5),
measure = msr("surv.cindex"),
terminator = trm("evals", n_evals = 100, k = 0)
)
rr_deephit = resample(task, at_deephit, resampling_outer, store_models = FALSE)
#Save model
lrn_deephit_tuned = at_deephit
saveRDS(lrn_deephit_tuned, "lrn_deephit_tuned.rds")

###############################################


#Training and testing 
lrn_deepsurv_tuned <- readRDS('lrn_deepsurv_tuned.rds')
lrn_deepsurv_tuned$train(task, split$train)
predictiontrain_deepsurv = lrn_deepsurv_tuned$predict(task, split$train)
prediction_deepsurv = lrn_deepsurv_tuned$predict(task, split$test)

lrn_deephit_tuned <- readRDS('lrn_deephit_tuned.rds')
#lrn_deephit_tuned = at_deephit
lrn_deephit_tuned$train(task, split$train)
predictiontrain_deephit = lrn_deephit_tuned$predict(task, split$train)
prediction_deephit = lrn_deephit_tuned$predict(task, split$test)
deep-learning survival-analysis survival mlr3
1个回答
0
投票

有同样的问题。就我而言,在 Deephit 中效果很好......奇怪

© www.soinside.com 2019 - 2024. All rights reserved.