【问题标题】:How to do nested cross-validation with LASSO in caret or tidymodels?如何在插入符号或 tidymodels 中使用 LASSO 进行嵌套交叉验证?
【发布时间】:2020-06-09 06:32:17
【问题描述】:

目标

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

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

带有“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).

【问题讨论】:

    标签: r cross-validation r-caret lasso-regression tidymodels


    【解决方案1】:

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

    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 package (v0.3.0.9001) 于 2020-06-11 创建

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

    【讨论】:

    猜你喜欢
    • 2013-12-26
    • 2016-12-07
    • 1970-01-01
    • 2017-03-16
    • 2021-06-11
    • 2020-01-25
    • 1970-01-01
    • 2015-11-11
    • 2018-10-22
    相关资源
    最近更新 更多