在mlr3中如何保存训练好的模型供其他项目调用?
问题原因
你之前仅保存learner$model的方式只能得到rpart原生的模型对象,不包含mlr3 Learner类封装的任务元信息(比如特征规则、标签分类水平)和predict_newdata()方法,因此无法直接用于mlr3的预测流程,也无法实现跨项目免重训调用。
正确操作方法
直接保存完整的训练后Learner对象即可,不需要单独提取底层模型:
模型保存代码
library("mlr3") # 原有训练逻辑 task = tsk("iris") learner = lrn("classif.rpart") learner$train(task, row_ids = 1:120) # 直接序列化保存整个训练后的learner对象 save(learner, file = "mlr3_learner_rpart.RData")
跨项目加载调用代码
在新的R会话/其他项目中直接加载该对象即可调用预测接口,无需重训,也不需要附带原始训练数据:
library("mlr3") # 加载保存的learner对象 load("mlr3_learner_rpart.RData") # 传入新数据集直接预测,仅需保证新数据集特征的列名、类型和训练时一致 new_data = iris[121:150, ] # 此处用iris子集模拟新的业务数据 predictions = learner$predict_newdata(new_data) print(predictions)
注意事项
- 该方法同样适用于封装了预处理逻辑的
GraphLearner(mlr3pipelines组件),所有预处理规则、训练参数都会被一起序列化保存,加载后直接可用。 - 如果你需要给非mlr3的接口提供原生模型,可以单独保存
learner$model,但这种场景下无法使用predict_newdata()方法,只能调用对应模型的原生预测接口。
内容的提问来源于stack exchange,提问作者alessio619
相关产品推荐
相关产品推荐

