R 应用modeltime\u fit\u重采样时,为什么要根据训练数据调整modeltime\u表使用的模型?(modeltime)
通过modeltime/tidymodels框架处理时间序列时,将显示以下工作流,以通过交叉验证验证模型的性能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
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)时重新培训和重新评估模型规范
什么是型号规格?
- 这是您指定的参数和模型类型(建模功能和引擎)
- 它不是“拟合模型”(意味着它不会用你的模型进行预测)
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]>