1

目标

我想根据此处显示的示意图实现 LASSO 模型并检查其在训练集上的可行性。(示意图说明:所有数据都分为测试集和训练集。训练集通过 5 倍交叉验证 (CV) 分成重采样。其中对每个重采样执行 10 倍 CV 以找到最佳 lambda。)套装尚不可用。

我想 LASSO 模型并使用嵌套 CV 和内部 CV 检查其性能,以通过网格搜索和外部 CV 获得最佳 lambda(分析和评估)来比较重采样 1、2、3 等。

带有“repeatedcv”的插入符号

来自 Caret 的带有“repeatedcv”的列车控制允许指定数量和重复。

lambdas = 10^seq(-3, -1, length = 20)
trControl = trainControl(
      'repeatedcv', 
      number = 10, 
      repeats = 5, 
      search = 'grid'
)
tuneGrid = expand.grid(alpha = 1, lambda = lambdas)
lasso = train(
       PD ~ ., data = selection, 
       method = 'glmnet',
       trControl = trControl, 
       tuneGrid = tuneGrid
)

lasso$results

使用上面的代码,插入符号结果是一个有 20 行的数据框。大概是定义网格上每个点的一行。但是,我希望插入符号使用 10 倍(数字 = 10)CV 为每个网格搜索找到一个最佳 lambda,然后比较最佳 lambda,因为粗体过程已执行多次(重复 = 5)。

4

1 回答 1

1

您可以使用以下方法在 tidymodels 中实现嵌套重采样nested_cv()

library(tidymodels)
#> ── Attaching packages ───────────────────────────────────────────────────────────────── tidymodels 0.1.0 ──
#> ✓ broom     0.5.6      ✓ recipes   0.1.12
#> ✓ dials     0.0.7      ✓ rsample   0.0.7 
#> ✓ dplyr     1.0.0      ✓ tibble    3.0.1 
#> ✓ ggplot2   3.3.1      ✓ tune      0.1.0 
#> ✓ infer     0.5.1      ✓ workflows 0.1.1 
#> ✓ parsnip   0.1.1      ✓ yardstick 0.0.6 
#> ✓ purrr     0.3.4
#> ── Conflicts ──────────────────────────────────────────────────────────────────── tidymodels_conflicts() ──
#> x purrr::discard() masks scales::discard()
#> x dplyr::filter()  masks stats::filter()
#> x dplyr::lag()     masks stats::lag()
#> x recipes::step()  masks stats::step()

results <- nested_cv(mtcars, 
                     outside = vfold_cv(repeats = 5), 
                     inside = bootstraps(times = 25))
results
#> # Nested resampling:
#> #  outer: 10-fold cross-validation repeated 5 times
#> #  inner: Bootstrap sampling
#> # A tibble: 50 x 4
#>    splits         id      id2    inner_resamples  
#>    <list>         <chr>   <chr>  <list>           
#>  1 <split [28/4]> Repeat1 Fold01 <tibble [25 × 2]>
#>  2 <split [28/4]> Repeat1 Fold02 <tibble [25 × 2]>
#>  3 <split [29/3]> Repeat1 Fold03 <tibble [25 × 2]>
#>  4 <split [29/3]> Repeat1 Fold04 <tibble [25 × 2]>
#>  5 <split [29/3]> Repeat1 Fold05 <tibble [25 × 2]>
#>  6 <split [29/3]> Repeat1 Fold06 <tibble [25 × 2]>
#>  7 <split [29/3]> Repeat1 Fold07 <tibble [25 × 2]>
#>  8 <split [29/3]> Repeat1 Fold08 <tibble [25 × 2]>
#>  9 <split [29/3]> Repeat1 Fold09 <tibble [25 × 2]>
#> 10 <split [29/3]> Repeat1 Fold10 <tibble [25 × 2]>
#> # … with 40 more rows

reprex 包于 2020-06-11 创建(v0.3.0.9001)

有关如何在这样的嵌套重采样上训练和评估模型的概述,请查看tidymodels.org.

于 2020-06-11T20:43:31.180 回答