Ajustement des hyperparamètres

Modélisation avec tidymodels en R

David Svancer

Data Scientist

Hyperparamètres

Paramètres du modèle définis avant l'entraînement et qui contrôlent la complexité

parsnip decision tree

  • cost_complexity
    • Pénalise un grand nombre de feuilles terminales
  • tree_depth
    • Chemin le plus long de la racine à une feuille
  • min_n
    • Nombre minimal d'observations dans un nœud pour poursuivre la division

Régions rectangulaires d'un modèle d'arbre de décision

Modélisation avec tidymodels en R

Valeurs par défaut des hyperparamètres

La fonction decision_tree() définit des valeurs d'hyperparamètres par défaut

  • cost_complexity est fixé à 0.01
  • tree_depth est fixé à 30
  • min_n est fixé à 20

Ce ne sont pas forcément les meilleures valeurs pour tous les ensembles de données

  • Ajustement des hyperparamètres
    • Processus utilisant la validation croisée pour trouver l'ensemble optimal d'hyperparamètres
dt_model <- decision_tree() %>% 
  set_engine('rpart') %>% 
  set_mode('classification')
Modélisation avec tidymodels en R

Marquer les hyperparamètres à ajuster

La fonction tune() du paquet tune

  • Pour marquer les hyperparamètres à ajuster, mettez-les égaux à tune() dans la spécification du modèle parsnip
  • Crée un objet modèle avec paramètres à ajuster
    • Indique aux autres fonctions qu'ils doivent être optimisés
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
Modélisation avec tidymodels en R

Créer un enchaînement pour l'ajustement

Les objets workflow se mettent à jour facilement

  • leads_wkfl précédent
    • Étapes d'ingénierie des caractéristiques pour les données de pointage des pistes et modèle d'arbre de décision avec hyperparamètres par défaut
  • Passez leads_wkfl à update_model() et fournissez un nouveau modèle d'arbre avec paramètres à ajuster
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
Modélisation avec tidymodels en R

Recherche sur grille

Méthode la plus courante pour ajuster des hyperparamètres

  • Générer une grille de combinaisons uniques de valeurs
    • Pour chaque combinaison, utiliser la validation croisée pour estimer la performance
  • Choisir la meilleure combinaison

 

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
... ... ...
Modélisation avec tidymodels en R

Repérer les hyperparamètres

La fonction parameters() du paquet dials

  • Prend un objet modèle parsnip
  • Retourne un tibble avec les hyperparamètres étiquetés par tune(), le cas échéant
    • Sert à générer des grilles d'ajustement avec 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[+]
Modélisation avec tidymodels en R

Grille aléatoire

Générer des combinaisons aléatoires

  • Cette méthode offre souvent de meilleures chances de trouver des valeurs optimales

La fonction grid_random()

  • Premier argument : le résultat de parameters()
  • size fixe le nombre de combinaisons aléatoires à générer
    • Exécutez set.seed() avant grid_random() pour la reproductibilité
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
Modélisation avec tidymodels en R

Enregistrer une grille d'ajustement

Première étape de l'ajustement

  • Créer et enregistrer une grille d'ajustement
  • dt_grid contient 5 combinaisons aléatoires d'hyperparamètres
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
Modélisation avec tidymodels en R

Ajuster avec validation croisée

La fonction tune_grid() effectue l'ajustement des hyperparamètres

Prend les arguments suivants :

  • workflow ou modèle parsnip
  • Objet de validation croisée, resamples
  • Grille d'ajustement, grid
  • Fonction metrics optionnelle

Retourne un tibble de résultats

  • .metrics
    • Colonne de liste avec les résultats pour chaque pli
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]>  ..
Modélisation avec tidymodels en R

Explorer les résultats d'ajustement

La fonction collect_metrics() fournit par défaut des résultats résumés

  • Moyenne des métriques estimées sur tous les plis par combinaison
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
Modélisation avec tidymodels en R

Passons à l'ajustement !

Modélisation avec tidymodels en R

Preparing Video For Download...