5 - Afinando modelos

Introducciendo Tidymodels

Parámetros de afinamiento

Algunos valores de los parametros de los modelos o de los preprocesadores no se pueden estimar directamente desde los datos

Por ejemplo:

  • La profundidad de los árboles de decisión
  • La cantidad de vecinos en un modelo de vecinos K-nearest

Optimiza los parámetros de afinamiento

  • Prueba valores diferentes para medir la calidad del modelo
  • Encuentra buenos valores para los parametros
  • Una vez los valores de los parametros han sido determinados, el modelo final se puede ajustar usando todos los datos en el set de entrenamiento

Optimiza los parámetros de afinamiento

Hay dos estrategias principales para optimizar:

  • Busqueda de cuadrícula (Grid search) 💠 que prueba un set de valores pre-elejidos

  • Busqueda iterativa 🌀 que sugiere nuevos valores del parametro para probar

Especificando los parametros de afinamiento

Tomemos nueso modelo de bosque aleatorio y tratemos de encontrar el número mínimo de datos min_n

arbol_espec <- rand_forest(min_n = tune()) %>% 
  set_mode("classification")

arbol_flujo <- workflow(propina ~ ., arbol_espec)
arbol_flujo
#> ══ Workflow ══════════════════════════════════════════════════════════
#> Preprocessor: Formula
#> Model: rand_forest()
#> 
#> ── Preprocessor ──────────────────────────────────────────────────────
#> propina ~ .
#> 
#> ── Model ─────────────────────────────────────────────────────────────
#> Random Forest Model Specification (classification)
#> 
#> Main Arguments:
#>   min_n = tune()
#> 
#> Computational engine: ranger

Try out multiple values

Prueba varios valores

tune_grid() funciona parecido a fit_resamples() pero puede calcular multiples valores del parámetro:

set.seed(22)
rf_res <- tune_grid(
  arbol_flujo,
  taxi_plieges,
  grid = 5
)

Compara los resultados

Inspecciona los resultados, y selecciona los mejores parámetros:

show_best(rf_res)
#> # A tibble: 5 × 7
#>   min_n .metric .estimator  mean     n std_err .config             
#>   <int> <chr>   <chr>      <dbl> <int>   <dbl> <chr>               
#> 1    33 roc_auc binary     0.653    10  0.0159 Preprocessor1_Model1
#> 2    31 roc_auc binary     0.650    10  0.0167 Preprocessor1_Model3
#> 3    21 roc_auc binary     0.646    10  0.0165 Preprocessor1_Model4
#> 4    13 roc_auc binary     0.646    10  0.0143 Preprocessor1_Model5
#> 5     6 roc_auc binary     0.631    10  0.0140 Preprocessor1_Model2

parametro_mejor <- select_best(rf_res)
parametro_mejor
#> # A tibble: 1 × 2
#>   min_n .config             
#>   <int> <chr>               
#> 1    33 Preprocessor1_Model1

También puedes usar collect_metrics() y autoplot()

El ajuste final

arbol_flujo <- finalize_workflow(arbol_flujo, parametro_mejor)

ajuste_final <- last_fit(arbol_flujo, taxi_separar) 

collect_metrics(ajuste_final)
#> # A tibble: 2 × 4
#>   .metric  .estimator .estimate .config             
#>   <chr>    <chr>          <dbl> <chr>               
#> 1 accuracy binary         0.912 Preprocessor1_Model1
#> 2 roc_auc  binary         0.636 Preprocessor1_Model1

Tu turno

Modifica tu flujo de modelo para usar por lo menos un parámetro

Usa busqueda de cuadricula para encontrar los mejores parametros

05:00