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:
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
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