如何获取使用vfold_cv的parsnip多分类逻辑回归V折交叉验证系数
提取5折交叉验证各折模型系数的方法
首先请确认你运行交叉验证拟合时,已经开启了保存每折叠对应工作流的参数,如果之前的代码没有加对应配置,需要先调整拟合代码的控制参数:
# 拟合交叉验证时必须配置control参数保存每折的工作流对象 resamples_fit <- workflow() |> add_model(logistic_reg(mode = "classification") |> set_engine("glm")) |> add_formula(你的目标变量 ~ .) |> fit_resamples( resamples = vfold_cv(你的数据集, v = 5), control = control_resamples(save_workflow = TRUE) # 该参数为必加项,否则不会存储每折的模型结果 )
后续提取系数的操作步骤如下:
- 第一步:从
resamples_fit中提取所有折叠保存的工作流对象library(purrr) library(broom) # 提取所有折叠的工作流对象列表 fold_workflows <- resamples_fit$.workflows - 第二步:遍历所有工作流,批量提取各折的模型系数
针对多分类逻辑回归,tidy()方法会自动按类别返回对应系数,你可以直接合并为统一的数据框方便后续分析:fold_coefs <- map2_dfr( .x = fold_workflows, .y = 1:5, # 对应5个折叠的编号 .f = function(wf, fold_id) { wf |> extract_fit_parsnip() |> # 从工作流中提取parsnip格式的拟合模型 tidy() |> # 提取模型系数,多分类结果会额外新增一列标记系数对应的类别 mutate(fold = fold_id) # 新增列标记该系数属于第几折 } ) - 第三步:如果需要单独查看每折的系数,可以按折叠编号拆分结果
# 拆分后列表的每个元素对应一折的所有系数 coef_by_fold <- split(fold_coefs, fold_coefs$fold)
如果你用的是多分类softmax回归而非二分类逻辑回归,最终输出的系数表中会额外包含
class列,对应每个系数所属的预测类别,你可以根据需要自行筛选对应类别的系数即可。
内容的提问来源于stack exchange,提问作者Ken
相关产品推荐
相关产品推荐

