Saltar al contenido
Machine Learning con Python

Validación cruzada y ajuste de hiperparámetros

Introducción

La validación cruzada y el ajuste de hiperparámetros son técnicas fundamentales en el aprendizaje automático para mejorar el rendimiento de los modelos y evitar problemas de sobreajuste.

La validación cruzada es un proceso que permite evaluar el rendimiento del modelo utilizando diferentes divisiones del conjunto de datos en conjuntos de entrenamiento y validación. Esto permite estimar mejor el rendimiento del modelo en datos que no se han utilizado para el entrenamiento y ayuda a prevenir el sobreajuste.

El ajuste de hiperparámetros es el proceso de seleccionar los valores óptimos para los diferentes parámetros del modelo que no se ajustan durante el entrenamiento. Esto incluye parámetros como la tasa de aprendizaje, la complejidad del modelo y la regularización.

El ajuste de hiperparámetros puede ser realizado a través de la validación cruzada para encontrar la combinación óptima de valores de hiperparámetros que maximizan el rendimiento del modelo en nuevos datos. Estas técnicas son esenciales en el desarrollo de modelos precisos y robustos en el aprendizaje automático.

Resumen

La validación cruzada y el ajuste de hiperparámetros son dos conceptos clave en el entrenamiento de modelos de Machine Learning. Te explicaré ambos conceptos en detalle.

Validación cruzada

La validación cruzada es una técnica que nos permite evaluar qué tan bien generaliza nuestro modelo a datos que nunca ha visto antes y se realiza para evitar el sobreajuste que podría ocurrir durante el entrenamiento del modelo. La idea principal es dividir los datos en dos conjuntos: uno para entrenamiento y otro para validación.

Luego, se entrena el modelo con el conjunto de entrenamiento y se evalúa su rendimiento con el conjunto de validación. Estos conjuntos deben ser mutuamente excluyentes para evitar el riesgo de que el modelo sobreajuste.

Sin embargo, la validación cruzada va un paso más allá y divide los datos en varios conjuntos para entrenamiento y validación, de manera que el modelo se entrena en distintas combinaciones de los datos y se evalúa su rendimiento promedio. Esto nos resulta muy útil cuando no disponemos de grandes cantidades de datos y queremos sacar el máximo provecho de ellos.

Ajuste de hiperparámetros

Los hiperparámetros son aquellos parámetros que no se ajustan automáticamente durante el entrenamiento de un modelo, sino que son fijos y se definen antes de entrenar el modelo.

Por ejemplo, en un modelo de regresión lineal, el coeficiente de regularización λ es un hiperparámetro que determina la importancia que el modelo da a la regularización. El ajuste de hiperparámetros se refiere al proceso de ajustar estos valores antes de entrenar el modelo para que éste tenga un rendimiento óptimo.

La técnica más común para ajustar los hiperparámetros es la búsqueda en cuadrícula (grid search), que implica definir un rango de valores para cada hiperparámetro y probar todas las combinaciones posibles.

Por lo tanto, la combinación de validación cruzada y ajuste de hiperparámetros puede ayudarnos a determinar la mejor configuración de hiperparámetros para nuestro modelo y también garantizar una evaluación precisa de su rendimiento en datos no vistos anteriormente.

Aplicación teórica

Para entender mejor la validación cruzada y el ajuste de hiperparámetros, podemos utilizar el siguiente ejemplo práctico:

Supongamos que queremos entrenar un modelo de clasificación para predecir si un paciente padece o no una enfermedad determinada, y disponemos de un conjunto de datos de 1000 pacientes con diversas características (edad, género, antecedentes médicos, resultados de pruebas, etc.).

Queremos utilizar un algoritmo de aprendizaje automático para entrenar nuestro modelo y determinar cuál es el mejor conjunto de hiperparámetros para conseguir los resultados más precisos posibles. Lo primero que haremos es dividir nuestros datos en conjunto de entrenamiento y conjunto de prueba.

Usaremos el 80% de los pacientes para entrenar nuestro modelo y el 20% restante para evaluarlo. Pero antes de hacerlo, aplicaremos la validación cruzada para asegurarnos de que nuestro modelo funciona bien y no está sobreajustando los datos.

Para ello, podemos dividir el conjunto de entrenamiento en varios subconjuntos, por ejemplo, en 5 partes iguales. Entonces, entrenaremos el modelo utilizando 4 de estos subconjuntos como conjunto de entrenamiento y probaremos su precisión utilizando el subconjunto que quedó fuera.

Repetiremos este proceso 5 veces, de modo que cada subconjunto haya sido utilizado una vez como conjunto de validación. Una vez que hayamos aplicado la validación cruzada, habremos obtenido una medida más precisa de la precisión de nuestro modelo.

Entonces, podemos proceder con el ajuste de hiperparámetros, que consiste en encontrar los valores que produzcan el mejor resultado. Para ello, podemos probar diferentes valores para cada uno de los hiperparámetros del modelo, por ejemplo, el número de árboles en un modelo de Random Forest, o el valor del parámetro de regularización en una regresión logística.

Entonces, utilizaremos la validación cruzada nuevamente para evaluar la precisión del modelo para cada conjunto de hiperparámetros y seleccionaremos aquellos que produzcan los mejores resultados.

Finalmente, una vez que hayamos seleccionado los mejores hiperparámetros, entrenaremos nuestro modelo utilizando todo el conjunto de entrenamiento original y evaluaremos su precisión utilizando el conjunto de prueba. Si la precisión es satisfactoria, nuestro modelo estará listo para ser utilizado en situaciones reales.

Aplicación práctica

Un ejemplo práctico de cómo realizar validación cruzada y ajuste de hiperparámetros en Python usando la biblioteca Scikit-Learn: Primero, importamos las bibliotecas necesarias:


import numpy as np 
from sklearn.datasets import load_iris 
from sklearn.neighbors import KNeighborsClassifier 
from sklearn.model_selection import GridSearchCV, cross_val_score

Luego, cargamos los datos y creamos nuestro modelo de clasificación:


iris = load_iris() 
X = iris.data 
y = iris.target 
knn = KNeighborsClassifier()

A continuación, usamos `GridSearchCV` para ajustar los hiperparámetros del modelo y realizar la validación cruzada:


param_grid = {'n_neighbors': np.arange(1, 25)} 
grid = GridSearchCV(knn, param_grid, cv=10) 
grid.fit(X, y) 
print("Mejores hiperparámetros:", grid.best_params_) 
print("Mejor puntuación de validación cruzada:", grid.best_score_) 

En este ejemplo, `param_grid` define un diccionario de hiperparámetros que queremos ajustar. Usamos `GridSearchCV` para iterar sobre todas las combinaciones posibles de hiperparámetros y ajustar el modelo de clasificación usando validación cruzada con una partición de 10 folds.

Finalmente, imprimimos los mejores hiperparámetros y la mejor puntuación de validación cruzada obtenida. Espero que este ejemplo te haya sido útil.