Регрессионные цепочки, в которых у нас смешанные типы выходных данных (непрерывный, класс, выживание)

#r #mlr3

#r #mlr3

Вопрос:

Я новичок в MLR3, и мне это нравится! Отличная работа! Леннарт Шнайдер приводит очень хороший пример регрессионных цепочек https://mlr3gallery.mlr-org.com/posts/2020-04-18-regression-chains / Это заставило меня задуматься — как я могу реализовать это, используя смешанные типы вывода. Предположим, например (адаптировано из его примера):

 library(data.table)
library(mvtnorm)
set.seed(2409)
n = 100
(mean = c(y1 = 1, y2 = 2, y3 = 3))
(sigma = matrix(c(1, -0.5, 0.25, -0.5, 1, -0.25, 0.25, -0.25, 1),
  nrow = 3, ncol = 3, byrow = TRUE))
Y = rmvnorm(n, mean = mean, sigma = sigma)
Y[,2] = 1.*(Y[,2]> 2)
Y[,3] = mapply(rexp, n=1, rate = 1/exp(Y[,3]-1.))
status = 1.*(Y[,3] > 4) (right censoring indicator)
dat = as.data.table(cbind(Y,status, x1, x2))
str(dat)
 

Шаг 1 понятен и остается тем же (скопирован непосредственно из примера):

 #-- Building Pipeline
library(mlr3)
library(mlr3learners)
library(mlr3pipelines)
library(mlr3misc)
#library(mlr)
task = TaskRegr$new("multiregression", backend = dat, target = "y1") ## Define the Task 1

#Use the input to predict y1 within the first learner (i.e., y1∼x1 x2).
step1 = po("copy", outnum = 2, id = "copy1") %>>%
  gunion(list(
    po("colroles", id = "drop_y2_y3",
       param_vals = list(new_role = list(y2 = character(), y3 = character()))) %>>% ## this line here drops the varaibles
      po("learner_cv", learner = lrn("regr.lm"), id = "y1_learner"), # we push this to a regr. learner
    po("nop", id = "nop1")
  )) %>>%
  po("featureunion", id = "union1")
step1$plot()
step1$train(task)[[1]]
 

Как выполняется остальная часть конвейера, когда Y2 — это выходные данные класса (шаг 2 — шаг классификации), а шаг 3 — данные выживания (шаг 3 — шаг выживания).

Я могу предоставить больше информации, если хотите.

Заранее большое спасибо