Как мне указать модель PLS в аккуратных моделях

#r #tidymodels

#r #tidymodels

Вопрос:

Я заинтересован в изучении tidymodels и попытался применить его к некоторым упражнениям в прикладном прогнозном моделировании. Это упражнение 6.2. Я хотел бы указать модель с частичным методом наименьших квадратов (PLS) для набора данных проницаемости.

У меня есть следующий код, который работает вплоть до сетки настройки. Я смоделировал свой анализ на основе регрессии Джулии Силдж — Лассо с помощью tidymodels и Office, найденных здесь .

Вы можете увидеть мой скрипт и сообщение об ошибке tune_grid ниже.

 library(tidymodels)
library(tidyverse)
library(skimr)
library(plsmod)
library(caret)
  
 library(AppliedPredictiveModeling)
data(permeability)

  
 dim(fingerprints)
fingerprints <- fingerprints[, -nearZeroVar(fingerprints)]
dim(fingerprints)
df <- cbind(fingerprints, permeability)
df <- as_tibble(df)
  
 perm_split <- initial_split(df)
perm_train <- training(perm_split)
perm_test <- testing(perm_split)
  
 perm_rec<- recipe(permeability ~ ., data=perm_train) %>% 
  step_center(all_numeric(),-all_outcomes()) %>% 
  step_scale(all_numeric(),-all_outcomes()) 
  
perm_prep <- perm_rec %>% 
  prep()


perm_prep
  
 
pls_spec <- pls(num_comp = 4) %>% 
  set_mode("regression") %>% 
  set_engine("mixOmics")

wf <- workflow() %>% 
  add_recipe(perm_prep) 
  
pls_fit <- wf %>% 
  add_model(pls_spec) %>% 
  fit(data=perm_train)

pls_fit %>%  
  pull_workflow_fit() %>% 
  tidy()
    
  
 set.seed(123)
perm_folds <-  vfold_cv(perm_train, v=10)

pls_tune_spec <- pls(num_comp = tune()) %>% 
  set_mode("regression") %>% 
  set_engine("mixOmics")

comp_grid <- expand.grid(num_comp = seq(from = 1, to = 20, by = 1))

doParallel::registerDoParallel()

set.seed(4763)

pls_grid <- tune_grid(
  wf %>% add_model(pls_tune_spec),
  resamples = perm_folds,
  grid = comp_grid
)

  

На данный момент я получаю следующую ошибку:
Все модели завершились ошибкой в tune_grid(). Смотрите .notes столбец.

Два вопроса:

  1. Почему моя сетка настройки выходит из строя и как я могу это исправить?
  2. Как можно увидеть .note столбец.

Ответ №1:

Я предполагаю, что вы, возможно, используете компьютер с Windows, потому что в настоящее время у нас есть ошибка в CRAN-версии tune для параллельной обработки в Windows. Попробуйте либо:

  • последовательное обучение без параллельной обработки или
  • установка версии для разработки tune, в которой мы исправили эту ошибку, с помощью devtools::install_github("tidymodels/tune")

Вы должны увидеть такие результаты:

 library(tidymodels)
library(plsmod)
library(AppliedPredictiveModeling)
data(permeability)

df <- cbind(fingerprints, permeability)
df <- as_tibble(df)

set.seed(123)
perm_split <- initial_split(df)
perm_train <- training(perm_split)
perm_test <- testing(perm_split)

set.seed(234)
perm_folds <-  vfold_cv(perm_train, v=10)

perm_rec <- recipe(permeability ~ ., data = perm_train) %>%
  step_nzv(all_predictors()) %>%
  step_center(all_numeric(), -all_outcomes()) %>% 
  step_scale(all_numeric(), -all_outcomes())

pls_spec <- pls(num_comp = tune()) %>% 
  set_mode("regression") %>% 
  set_engine("mixOmics")

comp_grid <- tibble(num_comp = seq(from = 1, to = 20, by = 5))

doParallel::registerDoParallel()

workflow() %>% 
  add_recipe(perm_rec) %>%
  add_model(pls_spec) %>%
  tune_grid(
    resamples = perm_folds,
    grid = comp_grid
  )
#> 
#> Attaching package: 'rlang'
#> The following objects are masked from 'package:purrr':
#> 
#>     %@%, as_function, flatten, flatten_chr, flatten_dbl, flatten_int,
#>     flatten_lgl, flatten_raw, invoke, list_along, modify, prepend,
#>     splice
#> 
#> Attaching package: 'vctrs'
#> The following object is masked from 'package:tibble':
#> 
#>     data_frame
#> The following object is masked from 'package:dplyr':
#> 
#>     data_frame
#> Loading required package: MASS
#> 
#> Attaching package: 'MASS'
#> The following object is masked from 'package:dplyr':
#> 
#>     select
#> Loading required package: lattice
#> 
#> Loaded mixOmics 6.12.2
#> Thank you for using mixOmics!
#> Tutorials: http://mixomics.org
#> Bookdown vignette: https://mixomicsteam.github.io/Bookdown
#> Questions, issues: Follow the prompts at http://mixomics.org/contact-us
#> Cite us:  citation('mixOmics')
#> 
#> Attaching package: 'mixOmics'
#> The following object is masked from 'package:plsmod':
#> 
#>     pls
#> The following object is masked from 'package:tune':
#> 
#>     tune
#> The following object is masked from 'package:purrr':
#> 
#>     map
#> # Tuning results
#> # 10-fold cross-validation 
#> # A tibble: 10 x 4
#>    splits           id     .metrics         .notes          
#>    <list>           <chr>  <list>           <list>          
#>  1 <split [111/13]> Fold01 <tibble [8 × 5]> <tibble [0 × 1]>
#>  2 <split [111/13]> Fold02 <tibble [8 × 5]> <tibble [0 × 1]>
#>  3 <split [111/13]> Fold03 <tibble [8 × 5]> <tibble [0 × 1]>
#>  4 <split [111/13]> Fold04 <tibble [8 × 5]> <tibble [0 × 1]>
#>  5 <split [112/12]> Fold05 <tibble [8 × 5]> <tibble [0 × 1]>
#>  6 <split [112/12]> Fold06 <tibble [8 × 5]> <tibble [0 × 1]>
#>  7 <split [112/12]> Fold07 <tibble [8 × 5]> <tibble [0 × 1]>
#>  8 <split [112/12]> Fold08 <tibble [8 × 5]> <tibble [0 × 1]>
#>  9 <split [112/12]> Fold09 <tibble [8 × 5]> <tibble [0 × 1]>
#> 10 <split [112/12]> Fold10 <tibble [8 × 5]> <tibble [0 × 1]>
  

Создано 2020-11-12 пакетом reprex (v0.3.0.9001)

Если у вас есть объект, подобный pls_grid с notes, вы должны иметь возможность перейти к столбцу через pls_grid$.notes или просмотреть первый пример через pls_grid$.notes[[1]] .

Комментарии:

1. Да, вы правы, у меня действительно есть окно. Предложенное вами исправление сработало как шарм — большое спасибо.