R 应用modeltime\u fit\u重采样时,为什么要根据训练数据调整modeltime\u表使用的模型?(modeltime)

R 应用modeltime\u fit\u重采样时,为什么要根据训练数据调整modeltime\u表使用的模型?(modeltime),r,time-series,tidymodels,R,Time Series,Tidymodels,通过modeltime/tidymodels框架处理时间序列时,将显示以下工作流,以通过交叉验证验证模型的性能 library(modeltime) library(modeltime.resample) library(tidyverse) library(timetk) resamples_tscv <- time_series_cv( data = m750, assess = "2 years", initial

通过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
m750_models
###模型时间表
###tibble:3 x 3
##.model\u id.model.model\u desc
##                               
##1 1 ARIMA(0,1,1)(0,1,1)[12]
##2先知
##3.3 GLMNET
但是,在检查m750_模型对象时,所有3个模型都已安装。模型不应该适合每个“训练/测试”分区吗?还是我误解了程序?下面我展示了使用fit_重采样的工作流

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]>
库(tidymodels)
数据(“hpc_数据”)
svm_规格%
设置引擎(“内核实验室”)%%>%
设置_模式(“回归”)
svm_wf%
添加_模型(svm_规范)%>%
添加_公式(化合物~)
hpc#U折叠#重采样结果
#>#10倍交叉验证
#>#tibble:10 x 4
#>拆分id.metrics.notes
#>                                        
#>1折叠01
#>2折叠02
#>3折叠03
#>4折叠4
#>5.折叠
#>折叠
#>7折叠07
#>8折叠08
#>9折叠09
#>10折叠10

我相信多了解一点程序会有所帮助。当您被设计为采用您的型号规格并重复重新安装以重新采样数据时

什么是重采样? 我们想测试我们的模型在数据子集上训练后的表现。这有助于理解我们对模型的信心,以及它是如何随时间序列(时间)变化的数据。重采样要求在每次重采样(列车/试验1、列车/试验2、…、列车/试验N)时重新培训和重新评估模型规范

什么是型号规格?
  • 这是您指定的参数和模型类型(建模功能和引擎)
  • 它不是“拟合模型”(意味着它不会用你的模型进行预测)
内部Modeltime重采样过程是如何工作的?
  • Modeltime重采样使用
    tune
    中的
    fit\u resamples()
    函数,并应用于包含一个或多个模型的Modeltime表中的每个模型

  • 重新装配过程会忽略“已装配模型”,但会将选定的参数和建模规范复制到重新采样的重复装配(训练)新模型

  • 结果是如果对不同的数据样本进行拟合,模型将如何执行。您可以使用绘图和表格实用程序显示结果

  • 重采样表和重采样图 来自以下方面的例子:


    函数
    fit\u resamples()
    使用指定的模型安装在每个折叠上,通常用于评估性能。在每个
    拆分中,模型适合“分析”集,然后在“评估”中进行评估设置。如果您想阅读更多内容,您非常完美,我同意您的意见。但是
    modeltime\u fit\u重采样
    函数的输入是一个“modeltime Table”,它是由
    modeltime\u Table
    函数生成的(在本例中是m750\u models对象),其中模型必须已经过培训。我的问题与
    fit\u重采样
    modeltime\u fit\u重采样
    函数的输入不同有关,我习惯于使用fit\u重采样,就像您在多个教程中展示的那样,在没有培训的情况下对模型进行拟合(或使用最佳超参数,使用
    完成\u工作流
    )在每次拆分中。或在内部
    modeltime\u fit\u重采样
    提取配方和模型规范,以便在未经培训的情况下重新创建工作流,从而根据每次拆分进行调整?如果我不太理解,请原谅。太好了,非常感谢您的解释。
    ## # 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]>
    
    
    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
    
    
    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]>