Ajustarea hiperparametrilor

Modelare cu tidymodels în R

David Svancer

Data Scientist

Hiperparametri

Parametrii modelului ale căror valori sunt setate înainte de antrenarea modelului și controlează complexitatea acestuia

Arbore de decizie parsnip

  • cost_complexity
    • Penalizează un număr mare de noduri terminale
  • tree_depth
    • Cel mai lung drum de la rădăcină la un nod terminal
  • min_n
    • Numărul minim de puncte de date dintr-un nod pentru o nouă divizare

Regiunile rectangulare ale modelului arbore de decizie

Modelare cu tidymodels în R

Valori implicite ale hiperparametrilor

Funcția decision_tree() setează valorile implicite ale hiperparametrilor

  • cost_complexity este setat la 0.01
  • tree_depth este setat la 30
  • min_n este setat la 20

Acestea pot să nu fie valorile optime pentru toate seturile de date

  • Ajustarea hiperparametrilor
    • Procesul de utilizare a validării încrucișate pentru a găsi setul optim de valori ale hiperparametrilor
dt_model <- decision_tree() %>% 
  set_engine('rpart') %>% 
  set_mode('classification')
Modelare cu tidymodels în R

Etichetarea hiperparametrilor pentru ajustare

Funcția tune() din pachetul tune

  • Pentru a eticheta hiperparametrii pentru ajustare, setați-i egali cu tune() în specificația modelului parsnip
  • Creează un obiect model cu parametri de ajustare
    • Va informa alte funcții că aceștia trebuie optimizați
dt_tune_model <- decision_tree(cost_complexity = tune(),
                               tree_depth = tune(),
                               min_n = tune()) %>% 
  set_engine('rpart') %>% 
  set_mode('classification')

dt_tune_model
Decision Tree Model Specification (classification)

Main Arguments:
  cost_complexity = tune()
  tree_depth = tune()
  min_n = tune()

Computational engine: rpart
Modelare cu tidymodels în R

Crearea unui workflow de ajustare

Obiectele workflow pot fi actualizate cu ușurință

  • leads_wkfl anterior
    • Pași de inginerie a caracteristicilor pentru date de lead scoring și model de arbore de decizie cu hiperparametri impliciți
  • Transmiteți leads_wkfl la update_model() și furnizați un nou model de arbore de decizie cu parametri de ajustare
leads_tune_wkfl <- leads_wkfl %>% 

update_model(dt_tune_model)
leads_tune_wkfl
== Workflow ===============
Preprocessor: Recipe
Model: decision_tree()
-- Preprocessor -----------
3 Recipe Steps
* step_corr()
* step_normalize()
* step_dummy()
-- Model ------------------
Decision Tree Model Specification (classification)
Main Arguments: cost_complexity = tune()
                tree_depth = tune()
                min_n = tune()
Computational engine: rpart
Modelare cu tidymodels în R

Căutare în grilă

Cea mai comună metodă de ajustare a hiperparametrilor

  • Generează o grilă de combinații unice de valori ale hiperparametrilor
    • Pentru fiecare combinație, se utilizează validarea încrucișată pentru estimarea performanței modelului
  • Se alege combinația cu cea mai bună performanță

 

cost_complexity tree_depth min_n
0.001 20 35
0.001 20 15
0.001 35 35
0.001 35 15
0.2 20 35
... ... ...
Modelare cu tidymodels în R

Identificarea hiperparametrilor

Funcția parameters() din pachetul dials

  • Primește un obiect model parsnip
  • Returnează un tibble cu hiperparametrii etichetați de funcția tune(), dacă există
    • Utilizat pentru generarea grilelor de ajustare cu pachetul dials
parameters(dt_tune_model)
Collection of 3 parameters for tuning

  identifier            type     object
cost_complexity  cost_complexity nparam[+]
tree_depth       tree_depth      nparam[+]
min_n            min_n           nparam[+]
Modelare cu tidymodels în R

Grilă aleatorie

Generarea combinațiilor aleatorii

  • Această metodă tinde să ofere șanse mai mari de a găsi valori optime ale hiperparametrilor

Funcția grid_random()

  • Primul argument este rezultatul funcției parameters()
  • size setează numărul de combinații aleatorii de generat
    • Executați funcția set.seed() înainte de grid_random() pentru reproductibilitate
set.seed(214)
grid_random(parameters(dt_tune_model),

size = 5)
# A tibble: 5 x 3
  cost_complexity  tree_depth min_n
            <dbl>      <int>  <int>
1    0.0000000758        14     39
2    0.0243               5     34
3    0.00000443          11      8
4    0.000000600          3      5
5    0.00380              5     36
Modelare cu tidymodels în R

Salvarea unei grile de ajustare

Primul pas în ajustarea hiperparametrilor

  • Creați și salvați o grilă de ajustare
  • dt_grid conține 5 combinații aleatorii de valori ale hiperparametrilor
set.seed(214)
dt_grid <- grid_random(parameters(dt_tune_model),
                       size = 5)

dt_grid
# A tibble: 5 x 3
  cost_complexity  tree_depth min_n
            <dbl>      <int>  <int>
1    0.0000000758        14     39
2    0.0243               5     34
3    0.00000443          11      8
4    0.000000600          3      5
5    0.00380              5     36
Modelare cu tidymodels în R

Ajustarea hiperparametrilor cu validare încrucișată

Funcția tune_grid() realizează ajustarea hiperparametrilor

Primește următoarele argumente:

  • Model workflow sau parsnip
  • Obiect de validare încrucișată, resamples
  • Grilă de ajustare, grid
  • Funcție opțională metrics

Returnează un tibble cu rezultate

  • .metrics
    • Coloană de tip listă cu rezultate pentru fiecare fold
dt_tuning <- leads_tune_wkfl %>%

tune_grid(resamples = leads_folds,
grid = dt_grid,
metrics = leads_metrics)
dt_tuning
# Tuning results
# 10-fold cross-validation using stratification 
# A tibble: 10 x 4
   splits             id       .metrics         ..
   <list>            <chr>      <list>          ..
<split [896/100]>   Fold01   <tibble [15 x 7]>  ..
................    ......   ...............    ..
<split [897/99]>    Fold09   <tibble [15 x 7]>  ..
<split [897/99]>    Fold10   <tibble [15 x 7]>  ..
Modelare cu tidymodels în R

Explorarea rezultatelor ajustării

Funcția collect_metrics() furnizează rezultate rezumate implicit

  • Medii ale valorilor metricilor estimate pentru toate fold-urile per combinație
dt_tuning %>% 
  collect_metrics()
# A tibble: 15 x 9
   cost_complexity tree_depth min_n .metric .estimator  mean     n std_err .config
             <dbl>      <int> <int> <chr>   <chr>      <dbl> <int>   <dbl> <chr>  
 1    0.0000000758         14    39 roc_auc binary     0.827    10 0.0147  Model1 
 2    0.0000000758         14    39 sens    binary     0.728    10 0.0277  Model1 
 3    0.0000000758         14    39 spec    binary     0.865    10 0.0156  Model1 
 4    0.0243                5    34 roc_auc binary     0.823    10 0.0147  Model2 
 .    ......               ..    .. ....    ......     .....    .. .....   ......
14    0.00380               5    36 sens    binary     0.747    10 0.0209  Model5 
15    0.00380               5    36 spec    binary     0.858    10 0.0161  Model5
Modelare cu tidymodels în R

Să facem ajustare!

Modelare cu tidymodels în R

Preparing Video For Download...