5. Re-muestreo y Validación Cruzada

Segunda idea:

Todo en machine learning es lograr equilibrio entre el sesgo y la varianza.

Re-muestreo y Validación Cruzada

Paso a paso del proceso de k-fold cross-validation:

Primero: duplicar el conjunto de datos en subconjuntos de igual tamaño. Por ejemplo, si k=10, dividimos el conjunto de datos en 10 subconjuntos.

Segundo: tomar cada subconjunto y dividirlo en dos, unos datos para entrenamiento y otros para validación. Tomar el segundo subconjunto y hacer lo mismo, pero ahora, todos los datos que se utilizaron como validación en el cojunto previo deben ser para entrenamiento, y los de validación, deben ser para entrenamiento. Este proceso se repite hasta que todos los subconjuntos hayan sido divididos en entrenamiento y validación, y los datos de validación, nunca se repiten entre los diferentes subconjuntos.

Tercero: estimamos el modelo en los datos de entrenamiento y lo evaluamos utilizando los datos de validación.

Re-muestreo y Validación Cruzada

Fialmente: se obtiene un valor promedio del desempeño del modelo en los datos de validación. Esta media nos proporciona una mejor aproximación del rendimiento del modelo, ya que el modelo ha sido evaluado en diferentes subconjuntos del conjunto de datos, en datos que no fueron utilizados para entrenamiento.

https://scikit-learn.org/stable/modules/cross_validation.html

https://www.tmwr.org/resampling.html

Validación Cruzada

Para hacer validación cruzada necesitamos utilizar un objeto que contenga la información separada en diferentes cajas.

crossvalidation <-
  vfold_cv(datos_entrenamiento, 
           v = 5,  # número de cajas
           strata = "PYALC")

CART con hiperparámetros

tree_spec <- 
  decision_tree(
    cost_complexity = tune(), 
    tree_depth = tune()
  ) |> 
  set_mode("classification") |> 
  set_engine("rpart")

Tip

  • Cost_complexity: es una medida de la penalización que se aplica al árbol en función de su complejidad. Un valor más alto de cost_complexity implica una penalización más fuerte, lo que lleva a un árbol más pequeño y menos profundo.

  • Tree_depth (profundidad del árbol): se refiere a la longitud máxima del camino más largo desde la raíz hasta una hoja en un árbol de decisión.

  • Min_n (mínimo número de muestras para dividir un nodo): Min_n es un parámetro que controla el número mínimo de datos requeridas para dividir un nodo en un árbol de decisión.

CART con hiperparámetros

Debemos especificar valors para los hiperparámetros que queremos ajustar.

tree_grid <- grid_regular(
  cost_complexity(range = c(-5L, -1L)),
  tree_depth (range = c(5L, 10L)))

CART con hiperparámetros

Una vez se ha definido cuáles son los valores que queremos probar, se estima el modelo en los diferetes conjuntos de datos.

doParallel::registerDoParallel()

set.seed(345)
tree_rs <-
  tune_grid(
    tree_spec,
    PYALC ~ .,
    resamples = crossvalidation,
    grid = tree_grid,
    metrics = metric_set(accuracy)
  )

doParallel::stopImplicitCluster()

Desempeño hiperparámetros

Filtrar los rultados para utilizar la combinación de hiperparámetros que mejor desempeño tuvo, y estimar el modelo.

show_best(tree_rs, metric = "accuracy")

autoplot(tree_rs)

simpler_tree <- select_best(tree_rs,metric = "accuracy")

final_tree <- finalize_model(tree_spec, simpler_tree)

final_fit <- fit(final_tree, PYALC ~ ., datos_entrenamiento)

Visualización del árbol

cart_trained <- 
  final_fit  |> extract_fit_parsnip()

cart_tree_fit <- final_fit$fit

treemisc::tree_diagram(cart_tree_fit, roundint=FALSE)

Obtener el desempeño del modelo en datos de validación

tree_val <- fit_resamples(
  final_tree, PYALC ~ ., 
  crossvalidation, 
  metrics= metric_set(accuracy))

tree_results_h  <- tree_val  |> 
  collect_metrics()  |> 
  mutate(model="Árbol Sintonizado")

lm_model_val <- fit_resamples(
  lm_model, PYALC ~ ., 
  crossvalidation, 
  metrics= metric_set(accuracy))

lm_results  <- lm_model_val  |> 
  collect_metrics()  |> 
  mutate(model="Regresión lineal")

tree_spec_val  <- fit_resamples(
  tree_spec, PYALC ~ ., 
  crossvalidation, 
  metrics= metric_set(accuracy))

tree_results  <- tree_spec_val|> 
  collect_metrics()   |> 
  mutate(model="Árbol")
  

rbind(lm_results, tree_results, tree_results_h) |> 
select(model, mean) 

Random Forest

Random Forest

Los árboles de decisión sufren de muchos problemas, en especial de sobreajuste. Esto se puede entender como un problema de varianza, y por lo tanto se pueden hacer cosas para minimizarlo. Por ejemplo, podríamos construir muchos árboles de decisión y promediar sus predicciones. Este es el concepto detrás de los Random Forests.

Random Forest

Especificar un modelo

rf_spec <- 
  rand_forest()  |> 
  set_mode("classification") |> 
  set_engine("ranger", importance = "permutation")

Estimar un modelo

rf_results <- rf_spec |> 
fit_resamples(PYALC ~ ., 
crossvalidation, metrics = metric_set(accuracy))

Obtener sus predicciones

rf_results_val  <- rf_results  |> 
collect_metrics()  |> 
  mutate(model="RF")
  

rbind(lm_results, tree_results, tree_results_h, rf_results_val) |> 
select(model, mean) 
library(vip)
rf_spec |> 
  fit(PYALC ~ ., datos_entrenamiento) |> 
  vip() +
  ggtitle("Random Forest")

Sesgo y varianza

Estos dos conceptos son cruciales para entender el equilibrio entre la complejidad del modelo y su capacidad para generalizar a nuevos datos.

Sesgo (Bias): a. Definición: El sesgo es la diferencia entre la predicción promedio de nuestro modelo y el valor verdadero que intentamos predecir.El sesgo, en términos estadísticos, se refiere a la diferencia sistemática entre la esperanza (o promedio) de las estimaciones que produce un estimador y el valor real del parámetro que se desea estimar. Un modelo con alta varianza es muy sensible a pequeñas variaciones en los datos de entrenamiento, lo que puede resultar en un sobreajuste. Es decir, el modelo se ajusta muy bien a los datos de entrenamiento, pero tiene un rendimiento deficiente en datos no vistos o de prueba.

  1. Ejemplo: Un modelo de regresión lineal simple podría tener un alto sesgo si los datos reales tienen una relación no lineal.
  2. Implicaciones: Un modelo con alto sesgo es demasiado simple y no captura la estructura subyacente de los datos. Esto conduce a un bajo rendimiento en el conjunto de entrenamiento y prueba.

Varianza (Variance): a. Definición: La varianza es la cantidad de variabilidad en las predicciones del modelo para un punto de datos dado. b. Ejemplo: Un modelo de árbol de decisión muy profundo podría tener alta varianza, ya que es muy sensible a pequeñas variaciones en los datos de entrenamiento. c. Implicaciones: Un modelo con alta varianza tiende a sobreajustarse a los datos de entrenamiento, lo que resulta en un buen rendimiento en el conjunto de entrenamiento pero un bajo rendimiento en el conjunto de prueba.

El objetivo en Machine Learning es equilibrar el sesgo y la varianza para minimizar el error de predicción general en el modelo a. Objetivo: Encontrar un equilibrio entre sesgo y varianza que minimice el error total de predicción. b. Estrategias: Seleccionar un modelo con la complejidad adecuada, usar técnicas de regularización, y validar el modelo con conjuntos de datos de entrenamiento y prueba separados.

Formas de disminur el sesgo

Aumentar la complejidad del modelo: Un modelo más complejo puede capturar mejor la estructura subyacente de los datos. Por ejemplo, en lugar de utilizar una regresión lineal simple, podrías probar una regresión polinomial o un modelo de árbol de decisión.

Añadir más variables: A veces, el sesgo puede ser el resultado de no tener en cuenta variables importantes que influyen en la variable objetivo. Añadir más variables relevantes puede ayudar a reducir el sesgo del modelo.

Utilizar técnicas de “ingeniería de predictores”: Transformar o combinar las variables existentes para crear nuevas características puede ayudar a capturar mejor la relación entre las variables de entrada y salida. Por ejemplo, si estás trabajando en un problema de predicción de precios de viviendas, podrías crear una nueva característica que represente la relación entre el tamaño de la casa y el número de habitaciones.

Aumentar el tamaño del conjunto de datos: Si tu conjunto de datos es pequeño o no es representativo de la población general, es posible que el modelo tenga un sesgo alto. Aumentar el tamaño del conjunto de datos y asegurarte de que es representativo puede ayudar a reducir el sesgo.

Utilizar ensembles de modelos: Combinar varios modelos en un ensemble puede ayudar a reducir el sesgo, ya que cada modelo puede capturar diferentes aspectos de la relación entre las variables de entrada y salida. Por ejemplo, puedes utilizar métodos de ensemble como Bagging, Boosting o Stacking.

Tercera idea

La base de datos trae información que no es buena para la predicción y a la vez, tiende a subestimar la variabilidad del mundo exterior. Regularizar es introducir un poco de sesgo para dar cuenta de las limitaciones del conjunto de datos.

Técnicas para reducir la varianza

Reducir la complejidad del modelo: Un modelo más simple tiende a tener una menor varianza y es menos propenso al sobreajuste. Por ejemplo, se puede limitar la profundidad de un árbol de decisión.

Utilizar regularización: La regularización es una técnica que añade una penalización a los coeficientes del modelo para evitar que se ajusten demasiado a los datos de entrenamiento.Por ejemplo, regularización L1 (Lasso) y L2 (Ridge).

Aumentar el tamaño del conjunto de datos: Si dispones de más datos, el modelo será menos sensible a pequeñas variaciones en los datos de entrenamiento y tendrá una menor varianza.

Técnicas para reducir la varianza

Eliminar características ruidosas: Si el modelo incluye características que no están relacionadas con la variable objetivo o que contienen mucho ruido, estas pueden aumentar la varianza del modelo. Realizar un análisis de importancia de características y eliminar las características poco importantes puede ayudar a reducir la varianza.

Validación cruzada (cross-validation): Utilizar la validación cruzada, como k-fold cross-validation, te permite evaluar el rendimiento del modelo en diferentes subconjuntos del conjunto de datos de entrenamiento. Esto puede ayudarte a identificar si el modelo está sobreajustando los datos y ajustar la complejidad del modelo en consecuencia.

Técnicas para reducir la varianza

Utilizar diferentes modelos: Combinar varios modelos en un ensemble puede ayudar a reducir la varianza, ya que la variabilidad de cada modelo individual se promedia. Por ejemplo, puedes utilizar métodos de ensemble como Bagging (Bootstrap Aggregating) o Random Forest, que promedian las predicciones de múltiples árboles de decisión entrenados en subconjuntos aleatorios de los datos.

Fin