为什么 modeltime_table 使用的模型在应用 modeltime_fit_resamples 时要根据训练数据进行调整?(模型时间)

why should the models used by modeltime_table be adjusted on the training data when applying modeltime_fit_resamples ?( modeltime )

在通过 modeltime / tidymodels 框架处理时间序列时,提供了以下工作流来验证具有交叉验证的模型的性能。

library(modeltime)
library(modeltime.resample)
library(tidyverse)
library(timetk)

resamples_tscv <- time_series_cv(
    data        = m750,
    assess      = "2 years",
    initial     = "5 years",
    skip        = "2 years",
    slice_limit = 4
)

resamples_tscv
## # Time Series Cross Validation Plan 
## # A tibble: 4 x 2
##   splits          id    
##   <list>          <chr> 
## 1 <split [60/24]> Slice1
## 2 <split [60/24]> Slice2
## 3 <split [60/24]> Slice3
## 4 <split [60/24]> Slice4

获得交叉验证泛洪后,使用 modeltime_fit_resamples 函数评估模型的性能,将 m750_models 对象作为参数传递。此商品包含 3 个合身模特。

resamples_fitted <- m750_models %>%
    modeltime_fit_resamples(
        resamples = resamples_tscv,
        control   = control_resamples(verbose = FALSE)
    )

resamples_fitted
## # Modeltime Table
## # A tibble: 3 x 4
##   .model_id .model     .model_desc             .resample_results
##       <int> <list>     <chr>                   <list>           
## 1         1 <workflow> ARIMA(0,1,1)(0,1,1)[12] <tibble [4 × 5]> 
## 2         2 <workflow> PROPHET                 <tibble [4 × 5]> 
## 3         3 <workflow> GLMNET                  <tibble [4 × 5]>

这里我有一个疑问,在tidymodels的工作流程中(不包括时间序列)当我们使用函数fit_resamples评估模型的性能时,模型没有调整,只有超参数如果是这种情况,它会更新,它不会在训练数据上应用函数拟合,这个想法是在交叉验证的每个分区“训练/测试”上进行拟合。

m750_models
## # Modeltime Table
## # A tibble: 3 x 3
##   .model_id .model     .model_desc            
##       <int> <list>     <chr>                  
## 1         1 <workflow> ARIMA(0,1,1)(0,1,1)[12]
## 2         2 <workflow> PROPHET                
## 3         3 <workflow> GLMNET

然而,在检查 m750_models 对象时,所有 3 个模型都已安装。这些模型不应该适合每个“训练/测试”分区吗?还是我误解了程序?下面我展示了一个使用 fit_resamples

的工作流程
library(tidymodels
data("hpc_data")

svm_spec <- svm_poly(degree = 1, cost = 1/4) %>%
  set_engine("kernlab") %>%
  set_mode("regression")

svm_wf <- workflow() %>%
  add_model(svm_spec) %>%
  add_formula(compounds ~ .)

hpc_folds <- vfold_cv(hpc_data)

svm_rs <- svm_wf %>%
  fit_resamples(
    resamples = hpc_folds
  )

svm_rs
#> # Resampling results
#> # 10-fold cross-validation 
#> # A tibble: 10 x 4
#>    splits             id     .metrics         .notes          
#>    <list>             <chr>  <list>           <list>          
#>  1 <split [3.9K/434]> Fold01 <tibble [2 × 3]> <tibble [0 × 1]>
#>  2 <split [3.9K/433]> Fold02 <tibble [2 × 3]> <tibble [0 × 1]>
#>  3 <split [3.9K/433]> Fold03 <tibble [2 × 3]> <tibble [0 × 1]>
#>  4 <split [3.9K/433]> Fold04 <tibble [2 × 3]> <tibble [0 × 1]>
#>  5 <split [3.9K/433]> Fold05 <tibble [2 × 3]> <tibble [0 × 1]>
#>  6 <split [3.9K/433]> Fold06 <tibble [2 × 3]> <tibble [0 × 1]>
#>  7 <split [3.9K/433]> Fold07 <tibble [2 × 3]> <tibble [0 × 1]>
#>  8 <split [3.9K/433]> Fold08 <tibble [2 × 3]> <tibble [0 × 1]>
#>  9 <split [3.9K/433]> Fold09 <tibble [2 × 3]> <tibble [0 × 1]>
#> 10 <split [3.9K/433]> Fold10 <tibble [2 × 3]> <tibble [0 × 1]>

我相信更多地了解程序会有所帮助。当您 Modeltime Resample 被设计为采用您的 模型的规格 并反复将其重新调整为重新采样的数据时。

什么是重采样?

我们的想法是测试我们的模型在数据子集上训练后的表现。这有助于了解我们对模型的信心以及它如何随着时间序列(时间)数据发生变化。重采样需要在每次重采样时重新训练和重新评估 模型规范 (train/test 1, train/test 2, ..., train/test N ).

什么是型号规格?

  • 就是你指定的参数和模型类型(建模函数和引擎)
  • 不是“拟合模型”(意味着它不会对您的模型进行预测)

内部 Modeltime Resample 过程如何工作?

  1. Modeltime Resample 使用 tune 中的 fit_resamples() 函数并应用于包含一个或多个模型的模型时间 table 中的每个模型。

  2. 改装过程忽略您的“拟合模型”,但复制所选参数和建模规范以重复拟合(训练)新模型到重新采样。

  3. 结果是您的模型在不同数据样本上的表现。您可以使用绘图和 table 实用程序显示结果。

重采样 Table 和重采样图

示例来自 Panel Data Tutorial