es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

MLR3 Análisis de Supervivencia: cómo realizar simultáneamente selección de características y ajuste de hiperparámetros al mismo tiempo y obtener selected_features?

Estoy intentando ajustar modelos coxph y paramétricos mientras realizo selección de características y ajuste de hiperparámetros al mismo tiempo. Tengo el siguiente código a continuación donde puedo usar autofselecter o autotuner dentro de resample, pero no ambos. ¿Cómo puedo hacer eso? ¿Necesito tener 3 resampling anidados (uno interno para la selección de características, otro intermedio para el ajuste y otro externo para la evaluación del rendimiento)? En mlr esto se hacía fácilmente donde se usaba un envoltorio de selección de características y luego uno de ajuste, pero no estoy seguro de cómo hacerlo mejor en mlr3.

También quiero obtener las características seleccionadas al final. Parece que learner$selected_features() no funciona para modelos de supervivencia.

task       = tsk("rats")
learner    = lrn("surv.coxph")

outer_cv   = rsmp("cv", folds = 10)$instantiate(task)
inner_cv   = rsmp("cv", folds = 10)$instantiate(task) 

Feat_select= auto_fselecter(method       = "random_search", 
                            learner      = learner,
                            resampling   = inner_cv,
                            measure      = msr("x"), 
                            term_evals   = 200)

model_tune = auto_tuner(method       = "irace", 
                        learner      = learner,
                        resampling   = inner_cv,
                        measure      = msr("x"),
                        search_space = ps())

model_res  = resample(task, model_tune , outer_cv, store_models = TRUE)


task       = tsk("rats")

learner2   = as_learner(po("encode") %>>% lrn("surv.cv_glmnet"))
learner2$selected_features()
Error: intento de aplicar una función no válida

learner3 = mlr3extralearners::lrn("surv.rsfsrc")
learner$selected_features()
Error: intento de aplicar una función no válida
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para realizar la selección de características y la optimización de hiperparámetros simultáneamente, puedes utilizar el enfoque de muestreo anidado con tres niveles. El nivel externo evaluará el rendimiento del modelo final, el nivel intermedio ajustará los hiperparámetros y el nivel interno realizará la selección de características.

    Aquí tienes un ejemplo de código para este enfoque:

    task <- tsk("rats")
    learner <- lrn("surv.coxph")
    
    outer_cv <- rsmp("cv", folds = 10)$instantiate(task)
    middle_cv <- rsmp("cv", folds = 10)$instantiate(task) # para la optimización de hiperparámetros
    inner_cv <- rsmp("cv", folds = 10)$instantiate(task) # para la selección de características
    
    # Define el espacio de búsqueda para ajustar los hiperparámetros
    param_space <- ps(
      cost = p_dbl(lower = 0, upper = 1, trafo = function(x) 10^x),
      penalty = p_dbl(lower = -2, upper = 2, trafo = function(x) 10^x)
    )
    
    # Define el método de selección de características
    feat_select <- auto_fselecter(
      method = "random_search",
      learner = learner,
      resampling = inner_cv,
      measure = msr("cindex"),
      term_evals = 200
    )
    
    # Define el ajustador
    model_tune <- auto_tuner(
      method = "irace",
      learner = learner,
      resampling = middle_cv,
      measure = msr("cindex"),
      search_space = param_space,
      tuner_pars = list(featsel.fun = feat_select) # pasar la selección de características al ajustador
    )
    
    # Muestrear con muestreo anidado
    model_res <- resample(
      task = task,
      learner = model_tune,
      resampling = outer_cv,
      store_models = TRUE,
      measures = msr("cindex"),
      updaters = list(model_tune, feat_select)
    )
    
    # Obtener las características seleccionadas al final
    model_res$models$learner[[1]]$get_feature_importance()
    

    Ten en cuenta que learner$selected_features() no funciona para modelos de supervivencia. En su lugar, puedes utilizar get_feature_importance() para obtener las características seleccionadas al final.

Comments are closed.