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

tidymodels调优中手动测试不同模型公式的实现与合理性

关于tidymodels测试不同模型公式性能的问题解答

1. 能否用tidymodels实现该需求?

可以实现,核心是把公式/特征组合作为调优参数传入workflow,而非直接在recipe中使用tune("formula")。以下是两种场景的可行方案:

场景1:仅测试不同公式(无额外预处理)

直接利用workflow的公式接口,将公式设为调优项:

library(tidymodels)

# 模拟示例数据
set.seed(123)
data <- tibble(
  y = rnorm(100),
  x1 = rnorm(100),
  x1_codingB = ifelse(x1 > 0, 1, 0),
  x2 = rnorm(100)
)

# 定义交叉验证折
data_cv <- vfold_cv(data, v = 5)

# 初始化线性模型
lm_model <- linear_reg() %>% set_engine("lm")

# 构建带可调优公式的workflow
lm_workflow <- workflow() %>%
  add_model(lm_model) %>%
  add_formula(tune("formula"))

# 定义包含目标公式的调优网格
tuning_grid <- grid_latin_hypercube(
  formula(c(y ~ x1, y ~ x1_codingB, y ~ x1 + x2)),
  size = 3
)

# 运行调优并收集结果
lm_tune <- tune_grid(
  lm_workflow,
  resamples = data_cv,
  grid = tuning_grid,
  metrics = metric_set(rmse)
)

# 查看各公式的性能表现
collect_metrics(lm_tune)

场景2:结合预处理测试不同编码方式

如果需要在预处理阶段生成不同编码特征,再测试对应公式,可以用step_select配合调优参数选择目标特征组合:

# 构建包含编码逻辑的recipe
rec <- recipe(y ~ ., data = data) %>%
  # 生成不同编码的特征
  step_mutate(
    x1_codingB = ifelse(x1 > 0, 1, 0),
    x1_codingC = cut(x1, breaks = 3)
  ) %>%
  # 将特征选择设为调优项
  step_select(tune("features"))

# 绑定模型与recipe的workflow
wf <- workflow() %>%
  add_recipe(rec) %>%
  add_model(lm_model)

# 定义不同特征组合的调优网格
grid <- expand.grid(
  features = list(
    y ~ x1,
    y ~ x1_codingB,
    y ~ x1_codingC,
    y ~ x1 + x2
  )
)

# 运行调优
tune_result <- tune_grid(
  wf,
  resamples = data_cv,
  grid = grid,
  metrics = metric_set(rmse)
)

2. 这种实现思路是否合理?

这种思路完全合理,甚至在特定场景下更具优势:

  • 目标明确:当你聚焦于验证特定特征、编码方式的性能差异时,手动指定候选组合能精准控制变量,避免自动特征选择带来的随机性或无关干扰。
  • 可解释性强:测试结果直接对应你关心的变量方案,便于后续分析和结论推导。
  • 效率更高:无需浪费算力在无关特征的筛选上,针对性测试能更快得到有效结论。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 00:27:32