【问题标题】:Recipe for XGBoost tidymodels. Error: unused argument (values)XGBoost tidymodels 的配方。错误:未使用的参数(值)
【发布时间】:2021-12-09 21:25:21
【问题描述】:

目前,我正在使用拉丁超立方体采样策略对时间序列上的 XGBoost 回归进行超参数调整实验。运行下面的代码时,所有模型在 tune_grid 操作期间都会失败。原因似乎是配方对象。我使用 step_dummy() 来转换我的单变量时间序列的值列在 .notes 对象中出现错误消息:预处理器 1/1:错误:未使用的参数(值)

我发现了其他一些出现此问题的帖子,但没有一个解决方案对我有帮助。

suppressPackageStartupMessages(library(tidyverse))
suppressPackageStartupMessages(library(lubridate))
library(timetk)
library(tidymodels)
library(modeltime)
library(tictoc)


dates <- ymd("2016-01-01")+ months(0:59)
fake_values <- 
  c(64,61, 90,138,240,141,123, 9,180,95,84,69,76,104,122,183,200,268,225,
    132,84,159,64,131,98,138,179,187,303,257,175,133,145,36,3,134,137,308,
    84,114,310,266,123,131,87,94,86,100,105,147,159,232,312,337,285,188,257,10,98,27
  )
df <- bind_cols(fake_values, dates) %>% 
  rename(c(values = ...1, dates = ...2)
  )

# training- and test set
data_splits <- initial_time_split(df, prop = 0.8)
data_train  <- training(data_splits)
data_test   <- testing(data_splits)

resampling_strategy <- 
  data_train %>%
  time_series_cv(
    initial = "12 months",
    assess = "3 months",
    skip = "3 months",
    cumulative  = TRUE,
    slice_limit = 3
)

# recipe
basic_rec <- recipe(values ~ ., data = data_train)  %>% 
  step_dummy(all_nominal(values), -all_outcomes()) 

basic_rec %>% prep()

【问题讨论】:

    标签: r time-series xgboost tidymodels


    【解决方案1】:

    看起来问题在于这些日期预测器没有转换为 xgboost 需要的数值。您确实使用了step_dummy(),但日期不是因子/名义变量,因此all_nominal() 不会选择它们。如果您明确选择它们,则会发生以下情况:

    library(tidymodels)
    #> Registered S3 method overwritten by 'tune':
    #>   method                   from   
    #>   required_pkgs.model_spec parsnip
    library(lubridate)
    #> 
    #> Attaching package: 'lubridate'
    #> The following objects are masked from 'package:base':
    #> 
    #>     date, intersect, setdiff, union
    
    dates <- ymd("2016-01-01") + months(0:59)
    fake_values <- 
      c(64,61, 90,138,240,141,123, 9,180,95,84,69,76,104,122,183,200,268,225,
        132,84,159,64,131,98,138,179,187,303,257,175,133,145,36,3,134,137,308,
        84,114,310,266,123,131,87,94,86,100,105,147,159,232,312,337,285,188,257,10,98,27
      )
    df <- bind_cols(fake_values, dates) %>% 
      rename(c(values = ...1, dates = ...2)
      )
    #> New names:
    #> * NA -> ...1
    #> * NA -> ...2
    
    # training- and test set
    data_splits <- initial_time_split(df, prop = 0.8)
    data_train  <- training(data_splits)
    data_test   <- testing(data_splits)
    
    basic_rec <- recipe(values ~ ., data = data_train) %>% 
      step_dummy(dates) 
    
    basic_rec %>% prep() %>% bake(new_data = NULL)
    #> Warning: The following variables are not factor vectors and will be ignored:
    #> `dates`
    #> Error: The `terms` argument in `step_dummy` did not select any factor columns.
    

    reprex package (v2.0.1) 于 2021 年 10 月 27 日创建

    您可能希望使用step_date() 之类的方式处理日期。

    【讨论】:

    • 非常感谢您的建议!那只是成功了。看来我需要更多地了解食谱。在我的大多数情况下,特征工程在准确性方面的作用远大于调优
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    • 2021-09-27
    • 1970-01-01
    • 2017-09-01
    • 2020-10-02
    • 2021-02-11
    相关资源
    最近更新 更多