如何在mlr3中仅保存ranger模型(不含数据)并解决加载报错
问题解决方法
1. 仅保存模型参数(不包含训练数据)
mlr3的Learner对象默认会关联训练任务数据,导致保存文件体积过大。可以通过两种方式实现仅保存核心模型:
- 方式一:提取底层ranger原生模型保存
训练完成后,直接提取learner_ranger$model(这是训练好的ranger原生模型对象)保存,完全不包含mlr3的包装结构和训练数据:
# 确保模型已成功训练 learner_ranger$train(train_task) # 提取原生ranger模型 ranger_core_model = learner_ranger$model # 保存纯模型 save(ranger_core_model, file = "ranger_core_model.rda")
- 方式二:清理Learner中的任务数据后保存
如果需要保留mlr3的Learner结构(方便后续直接调用predict方法),可以先清空Learner关联的训练任务数据:
learner_ranger$train(train_task) # 移除训练任务的关联 learner_ranger$state$train_task = NULL # 保存轻量化的Learner对象 save(learner_ranger, file = "lightweight_learner.rda")
2. 加载模型时的异常解决
load()函数的作用是将保存的对象直接加载到当前环境中,不会返回对象本身。你之前的错误是错误地将load()的返回值(仅为对象名称字符串)赋值给变量,正确操作如下:
# 直接加载,无需赋值 load("model.rda") # 加载完成后直接使用原变量名 str(learner_ranger)
如果保存的是ranger_core_model,加载后直接调用ranger_core_model变量即可。
3. 保存learner_ranger$model报错的原因
你报错信息中的learner_randomF$model是变量名拼写错误,正确的变量名应为learner_ranger$model。同时需要确保learner_ranger$train(train_task)已成功执行(无报错),只有训练完成后learner_ranger$model才会被赋值。
内容的提问来源于stack exchange,提问作者Saurabh
相关产品推荐
相关产品推荐

