概述
我已经制作了一个随机森林回归模型,我的目标是使用fit_samples()函数拟合模型,然后调整超参数。然而,我遇到了下面的错误信息:
错误信息:
! Fold01: model: 请求调优列,但在数据中有14个预测变量。将使用14个... x Fold01: internal: 错误: 必须按在`.data`中找到的变量分组。 * 未找到列`mtry`。 ! Fold02: model: 请求调优列,但在数据中有14个预测变量。将使用14个... x Fold02: internal: 错误: 必须按在`.data`中找到的变量分组。 * 未找到列`mtry`。 ! Fold03: model: 请求调优列,但在数据中有14个预测变量。将使用14个... x Fold03: internal: 错误: 必须按在`.data`中找到的变量分组。 * 未找到列`mtry`。
我在网上搜索了解决方案,但找不到与我的特定问题相符的问题。我不是高级R用户,我正在尽我最大的努力慢慢摸索Tidymodels包
如果有人能帮助解决这个错误信息,我将不胜感激。
提前多谢
R代码
seed(45L) #打开库 library(tidymodels) library(ranger) library(dplyr) #将单个数据集拆分为两个:训练集和测试集 data_split <- initial_split(FID) #为两个集合创建数据框: train_data <- training(data_split) test_data <- testing(data_split) #使用10折交叉验证重新采样数据(默认10折) cv <- vfold_cv(train_data, v=10) ########################################################### ##制作配方 rec <- recipe(Frequency ~ ., data = FID) %>% step_nzv(all_predictors(), freq_cut = 0, unique_cut = 0) %>% # 移除零方差变量 step_novel(all_nominal()) %>% # 准备测试数据以处理先前未见的因子级别 step_medianimpute(all_numeric(), -all_outcomes(), -has_role("id vars")) %>% # 用中位数替换缺失的数值观测值 step_dummy(all_nominal(), -has_role("id vars")) # 为分类变量生成虚拟变量 #制作随机森林模型 mod_rf <- rand_forest( mtry = tune(), trees = 1000, min_n = tune() ) %>% set_mode("regression") %>% set_engine("ranger") ##工作流程 wflow_rf <- workflow() %>% add_model(mod_rf) %>% add_recipe(rec) ##拟合模型 plan(multisession) fit_rf<-fit_resamples( wflow_rf, cv, metrics = metric_set(rmse, rsq), control = control_resamples(save_pred = TRUE, extract = function(x) extract_model(x))) #错误信息 ! Fold01: model: 请求调优列,但在数据中有14个预测变量。将使用14个... x Fold01: internal: 错误: 必须按在`.data`中找到的变量分组。 * 未找到列`mtry`。 ! Fold02: model: 请求调优列,但在数据中有14个预测变量。将使用14个... x Fold02: internal: 错误: 必须按在`.data`中找到的变量分组。 * 未找到列`mtry`。 ! Fold03: model: 请求调优列,但在数据中有14个预测变量。将使用14个... x Fold03: internal: 错误: 必须按在`.data`中找到的变量分组。 * 未找到列`mtry`。
数据框FID
structure(list(Year = c(2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017), Month = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L), .Label = c("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"), class = "factor"), Frequency = c(36, 28, 39, 46, 5, 0, 0, 22, 10, 15, 8, 33, 33, 29, 31, 23, 8, 9, 7, 40, 41, 41, 30, 30, 44, 37, 41, 42, 20, 0, 7, 27, 35, 27, 43, 38), Days = c(31, 28, 31, 30, 6, 0, 0, 29, 15, 29, 29, 31, 31, 29, 30, 30, 7, 0, 7, 30, 30, 31, 30, 27, 31, 28, 30, 30, 21, 0, 7, 26, 29, 27, 29, 29)), row.names = c(NA, -36L), class = "data.frame")
回答: