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

tidymodels工作流文件尺寸远超训练数据的问题咨询

tidymodels工作流过大问题的优化方案

问题背景

引入tidymodels工作流时,发现保存的workflow对象尺寸远大于训练数据,即便用butcher处理后,仍达到原数据的24倍,导致部署应用新数据时内存耗尽。按逻辑,预测仅需recipe步骤、模型系数及训练集统计量(如缩放用的均值/标准差),疑惑为何workflow体积会如此庞大。

原因分析

tidymodels的workflow默认会保留大量非必需信息:

  • 模型拟合的完整结果(比如glm对象包含的残差、拟合值等与预测无关的数据)
  • last_fit()会留存数据集分割规则、测试集预测结果等冗余内容
  • recipe对象可能附带训练集原始数据或中间计算产物
  • 框架自带的元数据、参数记录等额外结构

优化方案

1. 用fit()替代last_fit()

last_fit()会保留测试集相关的全部信息,若仅需用于部署的工作流,直接拟合训练数据即可:

# 直接拟合训练集,避免留存测试集冗余数据
my_fit <- my_workflow %>% 
    fit(data = df_train)

2. 精准精简workflow对象

使用butcher时开启verbose模式,明确移除的组件,确保砍掉所有非预测必需的内容:

# 精简并查看移除的组件详情
trimmed_workflow <- my_fit %>% 
    butcher(verbose = TRUE)

针对glm模型,butcher会自动清理残差、拟合值等无用部分;针对recipe,会删除原始训练数据,仅保留预处理所需的统计量(如均值、分位数)。

3. 启用RDS文件压缩

保存时利用write_rds的压缩参数大幅缩小文件体积:

# 用xz最高压缩比保存,也可选择gz/bz2平衡压缩率与读写速度
trimmed_workflow %>% 
    write_rds("my_fit.rds", compress = "xz")

4. 清理recipe冗余步骤

检查recipe中的操作,移除非必需的中间变量或计算:

  • 确保step_mutate仅生成建模所需变量
  • 避免保留与预测无关的中间产物

优化后效果验证

修改代码后重新计算尺寸比例:

size_fit_optimized <- my_fit %>% 
    butcher() %>% 
    obj_size()

# 查看优化后的尺寸比例
as.numeric(size_fit_optimized / size_data)

优化后的工作流体积通常仅为原数据的数倍,而非几十倍。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 13:17:00