如何修改mlr3的默认公式并在任务创建时自定义建模公式?
mlr3 自定义公式构建模型的规范实现方案
mlr3 的任务(Task)层默认不处理公式逻辑,特征构造的规则统一在流水线或者学习器层面实现,以下两种方案都比手动调用model.matrix生成特征再新建任务的方式更规范,不需要额外维护多份任务对象:
- 方案1:通过
mlr3pipelines的PipeOpFormula通用实现
该方案适配所有学习器,不需要修改学习器参数,直接在流水线层面完成特征构造:- 先构建原始任务(统一使用默认
Y ~ .的全特征逻辑即可)library(mlr3) library(mlr3pipelines) # 替换为你自己的数据集和目标列Y task = as_task_regr(your_data, target = "Y") - 构造带二阶交互项的特征处理节点
po_interaction = po("formula", formula = Y ~ .^2) - 对比时直接构建两条训练流水线即可:
- 基线模型(
Y ~ .):直接用原始任务训练学习器,不需要加特征处理节点 - 交互项模型(
Y ~ .^2):用po_interaction %>>% 学习器的流水线训练
该方案可以直接接入mlr3的基准测试(benchmark)框架,批量对比两类模型的效果。
- 基线模型(
- 先构建原始任务(统一使用默认
- 方案2:通过学习器的formula参数实现(无需额外依赖包)
如果你使用的学习器本身支持formula参数(比如regr.lm、classif.rpart等原生基于公式接口的学习器),可以直接在定义学习器时传入自定义公式:
直接用原始任务训练该学习器即可,学习器会自动按照指定公式构造特征。# 二阶交互项模型的学习器定义 lrn_interaction = lrn("regr.lm", formula = Y ~ .^2)
手动调用
model.matrix生成特征的方案需要额外处理类别变量编码、特征命名、缺失值对齐等问题,且无法复用mlr3原生的特征元数据管理逻辑,仅适合临时验证场景使用。
内容的提问来源于stack exchange,提问作者throwic
相关产品推荐
相关产品推荐

