为什么 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 过程如何工作?
Modeltime Resample 使用 tune
中的 fit_resamples()
函数并应用于包含一个或多个模型的模型时间 table 中的每个模型。
改装过程忽略您的“拟合模型”,但复制所选参数和建模规范以重复拟合(训练)新模型到重新采样。
结果是您的模型在不同数据样本上的表现。您可以使用绘图和 table 实用程序显示结果。
重采样 Table 和重采样图
示例来自 Panel Data Tutorial:
在通过 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 过程如何工作?
Modeltime Resample 使用
tune
中的fit_resamples()
函数并应用于包含一个或多个模型的模型时间 table 中的每个模型。改装过程忽略您的“拟合模型”,但复制所选参数和建模规范以重复拟合(训练)新模型到重新采样。
结果是您的模型在不同数据样本上的表现。您可以使用绘图和 table 实用程序显示结果。
重采样 Table 和重采样图
示例来自 Panel Data Tutorial: