在mlr3基准测试中拟合含交互项/二次项的线性回归模型
在mlr3基准测试中拟合含交互项/二次项的线性回归模型
要在mlr3的基准测试中实现带交互项或二次项的线性回归,核心是通过mlr3pipelines构建特征转换+模型拟合的管道,再将管道作为learner加入基准测试流程。以下是具体实现:
完整示例代码
library(mlr3verse) library(mlr3pipelines) # 显式加载管道包 # 1. 定义基础组件 tskScen <- tsk("mtcars") msrMSE <- msr("regr.rmse") rsgScen <- rsmp("cv", folds = 4) # 2. 构建带特征转换的线性回归管道 # 生成二次项+两两交互项(保留原变量),再拟合线性回归 lm_poly_interact <- po("polynomial", degree = 2, include_intercept = FALSE) %>>% po("regr.lm") lm_poly_interact$id <- "regr.lm_poly_interact" # 给管道命名,方便结果识别 # 3. 定义所有参与基准测试的learner learners <- list( lrns("regr.lm"), lrns("regr.ranger"), lm_poly_interact # 加入自定义管道learner ) # 4. 运行基准测试并评估 benchdesign <- benchmark_grid(tskScen, learners, rsgScen) bmr <- benchmark(benchdesign, store_models = TRUE) bmr$aggregate(msrMSE)
关键细节说明
- 特征转换算子:
po("polynomial", degree = 2):默认会生成原变量 + 所有变量的二次项 + 所有两两变量的交互项。- 若仅需交互项:设置
interaction_only = TRUE,即po("polynomial", degree = 2, interaction_only = TRUE, include_intercept = FALSE)。 - 若仅需二次项:可通过
po("mutate")手动生成单个变量的二次项,或结合过滤算子剔除交互项特征。
- 管道拼接:用
%>>%将特征转换算子与回归模型算子拼接,形成完整的学习管道,管道可直接作为learner参与基准测试。 - 结果识别:给管道设置
id后,在聚合结果中能清晰区分普通线性回归和带特征转换的线性回归。
内容的提问来源于stack exchange,提问作者Dirk
相关产品推荐
相关产品推荐

