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

使用tidymodels建模时遇‘object '.' not found’错误求助

解决tidymodels中fit()报错:object '.' not found

错误原因

  • 核心问题出在recipe里的step_dummy(endpoint):你对响应变量endpoint做了哑变量编码,但分类模型(如SVM)直接支持因子类型的响应变量,完全不需要这一步。执行该步骤后,原始的endpoint列会被替换为哑变量列(比如endpoint_1),但模型拟合时仍在寻找原始的endpoint变量,最终触发找不到对象的错误。
  • 额外问题:模型spec中使用了tune()参数,但直接调用fit()时没有指定具体参数值,这种情况下无法直接拟合,需要先指定固定值或改用交叉验证调优流程。

解决方法

  1. 移除recipe中的step_dummy(endpoint)步骤,保留endpoint的因子类型作为响应变量。
  2. 给SVM模型的cost和rbf_sigma指定具体数值(后续需要调优时,可再改为tune()并使用交叉验证流程)。

修正后的完整代码

library(tidymodels)
tidymodels_prefer()

# 创建数据集
endpoint <- factor(rep(c(1, 0), each = 10))
genes <- data.frame(matrix(rnorm(20 * 20), ncol = 20))
data <- data.frame(endpoint, genes)

# 修正后的Recipe:移除对响应变量的哑变量编码
svm_linear_rec <- 
  recipe(endpoint ~ ., data = data) %>%
  step_normalize(all_numeric_predictors()) 

# 修正后的Spec:指定具体参数值替代tune()
svm_spec <- 
  svm_rbf(cost = 1, rbf_sigma = 0.1) %>% 
  set_engine("kernlab") %>% 
  set_mode("classification")

# 构建Workflow
svm_wflow <- 
  workflow() %>% 
  add_model(svm_spec) %>% 
  add_recipe(svm_linear_rec)

# 拟合模型
svm_fit <- fit(svm_wflow, data)

# 查看拟合结果
svm_fit

后续参数调优说明

如果需要对cost和rbf_sigma进行参数调优,不要直接用fit(),而是使用交叉验证流程:

# 重新定义带调优参数的模型spec
svm_spec_tune <- 
  svm_rbf(cost = tune(), rbf_sigma = tune()) %>% 
  set_engine("kernlab") %>% 
  set_mode("classification")

# 更新workflow
svm_wflow_tune <- svm_wflow %>% update_model(svm_spec_tune)

# 创建交叉验证折
set.seed(123)
data_folds <- vfold_cv(data, v = 5)

# 运行参数调优
svm_tune_results <- tune_grid(
  svm_wflow_tune,
  resamples = data_folds,
  grid = 10  # 使用默认10组参数组合,也可自定义参数网格
)

# 查看最优参数组合
show_best(svm_tune_results, metric = "roc_auc")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 11:00:30