You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从tidymodels工作流中提取逻辑回归模型的变量权重?

提取tidymodels中弹性网模型的变量权重明细

1. 从工作流中取出目标模型

你已经通过control_grid提取了模型,接下来先从lr_workflow$.extracts里拿到具体的拟合模型对象:

  • 如果要取最优参数对应的模型,可以先筛选最优参数再提取:
# 先获取你指定评估指标下的最优参数(比如roc_auc)
best_params <- lr_workflow %>% 
  extract_workflow_set_result() %>% 
  select_best(metric = "roc_auc") # 替换成你实际用的评估指标

# 基于最优参数生成最终拟合模型
best_fit <- lr_workflow %>% 
  finalize_workflow(best_params) %>% 
  fit(data = your_train_data) %>% # 替换成你的训练数据集
  extract_fit_parsnip()
  • 如果直接从已有的$.extracts里取特定模型(比如第1个参数组合的模型):
fit_obj <- lr_workflow$.extracts[[1]]$.fit

2. 提取变量权重(系数)

glmnet的模型系数存在fit_obj$fit里,用coef()函数指定对应的lambda值(也就是调参里的penalty)就能拿到明细:

# 用最优参数里的penalty值提取系数
coef_matrix <- coef(best_fit$fit, s = best_params$penalty)

# 转成数据框,方便查看和筛选
coef_df <- as.data.frame(as.matrix(coef_matrix)) %>% 
  tibble::rownames_to_column("variable") %>% 
  dplyr::rename(weight = s1) %>% 
  dplyr::filter(weight != 0) # 过滤掉被弹性网筛选掉的系数为0的变量

注意事项

  • 如果你的模型做了预处理(比如标准化、哑变量编码),输出的变量名可能是预处理后的,要对应回原始变量的话,可以用extract_preprocessor()查看预处理规则:
preprocessor <- lr_workflow %>% extract_preprocessor()
preprocessor$terms # 查看变量映射关系
  • 如果是多lambda值的情况,你也可以传入多个s值,一次性提取不同penalty下的系数。

内容的提问来源于stack exchange,提问作者for_the_love_of_cod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 03:23:11