如何从此工作流程中提取逻辑回归模型?

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

我正在使用重症监护室患者的一些数据创建逻辑回归模型。该模型旨在根据患者对某种治疗的反应来预测患者在未来 7 天内是否可能生存或死亡。

为此,我使用 R 中的

tidymodels
套件。我已经成功训练和调整了弹性网络逻辑回归模型,但我想查看已创建的特定模型(即该模型中有哪些变量,分解它赋予每个变量的权重等)。我已经非常接近了,但我只是无法完成最后一小步。

我的工作流程如下:

# initial split of data
proning_initial_split28 <- 
  raw_proning_mortality %>% 
  initial_split(prop = 0.9, strata = mortality_28)

proning_modelTrain_28 <- 
  proning_initial_split28 %>% 
  training()

创建具有 5 个折叠的 k 折叠对象 -

lr_v_fold <- 
  vfold_cv(data = proning_modelTrain_28,
           v = 5, 
           repeats = 5, 
           strata = mortality_28)

创建数据处理配方-

lr_recipe <- 
  recipe(proning_modelTrain_28, formula = mortality_28 ~ .) %>% 
  step_rm(mortality_07) %>% 
  step_dummy(all_factor_predictors(), -mortality_28) %>% 
  step_impute_bag(all_predictors()) %>% 
  step_corr(all_predictors(), threshold = 0.9) %>% 
  step_zv(all_predictors()) %>% 
  prep()

模型的创建和模型的调整网格-

lr_model_01 <- 
  logistic_reg(mode = 'classification',
               engine = 'glmnet',
               penalty = tune(),
               mixture = tune()) %>% 
  set_args(maxit=1e+06)


lr_tuning_grid <- 
  grid_max_entropy(penalty(),
                   mixture(),
                   iter = 2000)

创建最终工作流程以将所有内容整合在一起。我已经通过了

control_grid()
指令来保存所做的预测并保存每一步生成的模型 -

lr_workflow <- 
  workflow() %>% 
  add_model(lr_model_01) %>% 
  add_recipe(lr_recipe) %>% 
  tune_grid(resamples = lr_v_fold,
            grid = lr_tuning_grid,
            metrics = metric_set(sens, spec, ppv, npv, roc_auc),
            control = control_grid(save_pred = T, 
                                   extract = extract_fit_parsnip))

我无法访问此最终工作流对象中的模型。

lr_workflow$.extracts
似乎包含模型(下面的示例)。

然而,深入是很困难的。

上图显示了项目[[25[]]。我可以用

lr_workflow$.extracts[[25]]$.extracts[1]
来参与其中的一部分,但我得到的输出如下 -

[[1]]
parsnip model object


Call:  glmnet::glmnet(x = maybe_matrix(x), y = y, family = "binomial",      alpha = ~0.0505244575906545, maxit = ~1e+06) 

    Df  %Dev Lambda
1    0  0.00 4.4620
2    1  0.16 4.0660
3    1  0.33 3.7050
(continues for a total 100 rows)

如何更好地分解我训练过的逻辑回归模型?我的意思是类似于下图的细分(该图像是一个说明性示例,与我的具体数据无关)-

r machine-learning logistic-regression tidymodels r-parsnip
1个回答
0
投票

这是一个解决方案。诀窍在于您需要将预处理工作流程保存在一个对象中,以便随后可以使用它来获取模型。请注意,我更改了原始的

lr_workflow
,因此它包含预处理工作流程,并创建了一个名为
tune_wf
的新对象来获取调整结果。

# Create preprocessing workflow
lr_workflow <- 
  workflow() %>% 
  add_model(lr_model_01) %>% 
  add_recipe(lr_recipe) 

# Tune parameters
tune_wf <- lr_workflow %>% 
  tune_grid(resamples = lr_v_fold,
            grid = lr_tuning_grid,
            metrics = metric_set(sens, spec, ppv, npv, roc_auc),
            control = control_grid(save_pred = T, 
                                   extract = extract_fit_parsnip))

# Collect metrics
tune_wf %>% 
  collect_metrics()

# Get model with highest roc_auc or another meric
best_mod <- tune_wf %>%
  select_best("roc_auc")

# Get the model
final_wf <- lr_workflow %>% 
  finalize_workflow(best_mod)

# last fit the model
final_wf %>%
  last_fit(data_split) 
© www.soinside.com 2019 - 2024. All rights reserved.