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

如何高效序列化并保存mlr3中resample生成的R6类对象?

高效序列化保存mlr3中resample生成的R6对象的方法

针对resample()生成的R6对象(尤其store_models=T时)序列化慢的问题,目前有几种实用的解决思路:

  • 只保存核心结果,舍弃完整R6对象
    大多数场景下,你不需要保存整个重抽样对象,只需提取关键信息(性能指标、最优参数、预测值等)存入普通数据结构,再用saveRDS保存:

    # 提取外层重抽样的性能评分
    perf_scores <- rr1$score()
    # 提取自动调参得到的最优参数配置
    best_hyperparams <- rr1$learners[[1]]$model$learner$param_set$values
    # 提取预测结果(按需选择)
    pred_results <- rr1$predictions()
    # 打包为轻量列表保存
    saveRDS(list(performance = perf_scores, best_params = best_hyperparams, predictions = pred_results), "lightweight_resample.rds")
    
  • 使用mlr3生态的专用序列化工具
    mlr3提供的mlr3misc::rds_save函数针对R6对象做了优化,能减少序列化的时间开销和文件体积,直接替代saveRDS即可:

    library(mlr3misc)
    rds_save(rr1, file = "optimized_resample.rds")
    
  • 减少模型存储的冗余
    如果业务场景允许,在resample()或auto_tuner()中设置store_models = FALSE,只保留性能数据而非完整模型实例,这是最直接降低序列化成本的方式。但如果后续需要基于模型做进一步分析,此方法不适用。

  • 手动清理R6对象的冗余引用
    R6对象的递归引用是序列化缓慢的核心原因,可手动剥离不必要的关联对象(比如训练任务的原始数据、未使用的中间状态),但此方法需要熟悉mlr3的R6结构,操作不当可能导致对象失效:

    # 示例:清理每个学习器中的任务引用
    for (learner in rr1$learners) {
      if (!is.null(learner$model$task)) {
        learner$model$task <- NULL
      }
    }
    saveRDS(rr1, "cleaned_resample.rds")
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 14:22:43