El modelo de aprendizaje (ML) no debe memorizar los datos de capacitación. En cambio, debería aprender bueno de los datos de capacitación dados para que pueda generalizar Bien a datos nuevos e invisibles.
La configuración predeterminada de un modelo ML puede no funcionar bien para cada tipo de problema que intentamos resolver. Necesitamos ajustar manualmente estas configuraciones para obtener mejores resultados. Aquí, “ajustes” referirse a hiperparámetros.
¿Qué es un hiperparámetro en un modelo ML?
El usuario define manualmente un valor de hiperparameter antes del proceso de capacitación, y no aprende su valor de los datos durante el proceso de capacitación del modelo. Una vez definido, su valor permanece fijo hasta que el usuario cambia.
Necesitamos distinguir entre un hiperparámetro y un parámetro.
Un parámetro aprende su valor de los datos dados, y su valor depende de los valores de los hiperparámetros. Se actualiza un valor de parámetro durante el proceso de capacitación.
Aquí hay un ejemplo de cómo diferentes valores de hiperparameter afectan el modelo de máquina de vectores de soporte (SVM).
from sklearn.svm import SVC
clf_1 = SVC(kernel='linear')
clf_2 = SVC(C, kernel='poly', degree=3)
clf_3 = SVC(C, kernel='poly', degree=1)
Ambos CLF_1 y CLF_3 Los modelos realizan una clasificación lineal SVM, mientras que el CLF_2 El modelo realiza una clasificación no lineal. En este caso, el usuario puede realizar tareas de clasificación lineales y no lineales cambiando el valor del ‘núcleo’ hiperparámetro en el Svc () clase.
¿Qué es el ajuste del hiperparameter?
La sintonización de hiperparameter es un proceso iterativo de optimizar el rendimiento de un modelo al encontrar los valores óptimos para los hiperparámetros sin causar sobreajuste.
A veces, como en el ejemplo SVM anterior, la selección de algunos hiperparámetros depende del tipo de problema (regresión o clasificación) que queremos resolver. En ese caso, el usuario simplemente puede configurar ‘lineal’ para clasificación lineal y ‘escuela politécnica’ para clasificación no lineal. Es una selección simple.
Sin embargo, por ejemplo, el usuario debe usar métodos de búsqueda avanzados para seleccionar el valor para el ‘grado’ hiperparámetro.
Antes de discutir los métodos de búsqueda, necesitamos comprender dos definiciones importantes: Espacio de búsqueda de hiperparameter y distribución de hiperparámetro.
Espacio de búsqueda de hiperparameter
El espacio de búsqueda de hiperparameter contiene un conjunto de posibles combinaciones de valor de hiperparameter definidas por el usuario. La búsqueda se limitará a este espacio.
El espacio de búsqueda puede ser n-dimensionaldónde norte es un entero positivo.
El número de dimensiones en el espacio de búsqueda es el número de hiperparámetros. (por ejemplo, tridimensional-3 hiperparámetros).
El espacio de búsqueda se define como un diccionario de Python que contiene nombres de hiperparameter como claves y valores para esos hiperparámetros como listas de valores.
search_space = {'hyparam_1':[val_1, val_2],
'hyparam_2':[val_1, val_2],
'hyparam_3':['str_val_1', 'str_val_2']}
Distribución de hiperparámetro
La distribución subyacente de un hiperparámetro también es importante porque decide cómo se probará cada valor durante el proceso de ajuste. Hay cuatro tipos de distribuciones populares.
- Distribución uniforme: Todo Los valores posibles dentro del espacio de búsqueda se seleccionarán igualmente.
- Distribución uniforme de log: A La escala logarítmica se aplica a valores distribuidos uniformemente. Esto es útil cuando el rango de hiperparámetros es grande.
- Distribución normal: Los valores se distribuyen alrededor de una media cero y una desviación estándar de 1.
- Distribución log-normal: A La escala logarítmica se aplica a valores normalmente distribuidos. Esto es útil cuando el rango de hiperparámetros es grande.
La elección de la distribución también depende del tipo de valor del hiperparámetro. Un hiperparámetro puede tomar valores discretos o continuos. Un valor discreto puede ser un entero o una cadena, mientras que un valor continuo siempre requiere números de punto flotante.
from scipy.stats import randint, uniform, loguniform, norm
# Define the parameter distributions
param_distributions = {
'hyparam_1': randint(low=50, high=75),
'hyparam_2': uniform(loc=0.01, scale=0.19),
'hyparam_3': loguniform(0.1, 1.0)
}
- Randint (50, 75): Selecciona enteros aleatorios entre 50 y 74
- Uniforme (0.01, 0.49): Selecciona números de punto flotante uniformemente entre 0.01 y 0.5 (distribución uniforme continua)
- loguniform (0.1, 1.0): Selecciona valores entre 0.1 y 1.0 en una escala de registro (distribución uniforme de registro)
Métodos de ajuste de hiperparameter
Hay muchos tipos diferentes de métodos de ajuste de hiperparameter. En este artículo, nos centraremos en solo tres métodos que caen bajo el búsqueda exhaustiva categoría. En una búsqueda exhaustiva, el algoritmo de búsqueda busca exhaustivamente todo el espacio de búsqueda. Hay tres métodos en esta categoría: búsqueda manual, búsqueda de cuadrícula y búsqueda aleatoria.
Búsqueda manual
No hay algoritmo de búsqueda para realizar una búsqueda manual. El usuario solo establece algunos valores basados en el instinto y ve los resultados. Si el resultado no es bueno, el usuario intenta otro valor, etc. El usuario aprende de los intentos anteriores establecerá mejores valores en futuros intentos. Por lo tanto, la búsqueda manual cae bajo el búsqueda informada categoría.
No hay una definición clara del espacio de búsqueda de hiperparameter en la búsqueda manual. Este método puede llevar mucho tiempo, pero puede ser útil cuando se combina con otros métodos como la búsqueda de la cuadrícula o la búsqueda aleatoria.
La búsqueda manual se vuelve difícil cuando tenemos que buscar dos o más hiperparámetros a la vez.
Un ejemplo para la búsqueda manual es que el usuario simplemente puede establecer ‘lineal’ para clasificación lineal y ‘escuela politécnica’ para clasificación no lineal en un modelo SVM.
from sklearn.svm import SVC
linear_clf = SVC(kernel='linear')
non_linear_clf = SVC(C, kernel='poly')
Búsqueda de redes
En la búsqueda de cuadrícula, el algoritmo de búsqueda prueba todas las combinaciones posibles de hiperparameter definidas en el espacio de búsqueda. Por lo tanto, este método es un método de fuerza bruta. Este método lleva mucho tiempo y requiere más potencia computacional, especialmente cuando aumenta el número de hiperparámetros (maldición de la dimensionalidad).
Para usar este método de manera efectiva, necesitamos tener un espacio de búsqueda de hiperparameter bien definido. De lo contrario, perderemos mucho tiempo probando combinaciones innecesarias.
Sin embargo, el usuario no necesita especificar la distribución de hiperparámetros.
El algoritmo de búsqueda no aprende de los intentos anteriores (iteraciones) y, por lo tanto, no intenta mejores valores en futuros intentos. Por lo tanto, la búsqueda de cuadrícula cae bajo el búsqueda desinformada categoría.
Búsqueda aleatoria
En la búsqueda aleatoria, el algoritmo de búsqueda prueba aleatoriamente los valores de hiperparameter en cada iteración. Al igual que en la búsqueda de cuadrícula, no aprende de los intentos anteriores y, por lo tanto, no intenta mejores valores en futuros intentos. Por lo tanto, la búsqueda aleatoria también cae bajo búsqueda desinformada.
La búsqueda aleatoria es mucho mejor que la búsqueda de la cuadrícula cuando hay un gran espacio de búsqueda y no tenemos idea del espacio de hiperparameter. También se considera computacionalmente eficiente.
Cuando proporcionamos el mismo tamaño de espacio de hiperparameter para la búsqueda de cuadrícula y la búsqueda aleatoria, no podemos ver mucha diferencia entre los dos. Tenemos que definir un espacio de búsqueda más grande para aprovechar la búsqueda aleatoria sobre la búsqueda de la red.
Hay dos formas de aumentar el tamaño del espacio de búsqueda de hiperparameter.
- Al aumentar la dimensionalidad (agregando nuevos hiperparámetros)
- Ampliando la gama de hiperparámetros
Se recomienda definir la distribución subyacente para cada hiperparámetro. Si no se define, el algoritmo usará el predeterminado, que es la distribución uniforme en la que todas las combinaciones tendrán la misma probabilidad de ser elegido.
¡Hay dos hiperparámetros importantes en el método de búsqueda aleatorio en sí!
- nitro: El número de iteraciones o el tamaño de la muestra aleatoria de combinaciones de hiperparameter para probar. Toma un entero. Esto cotiza tiempo de ejecución frente a calidad de la salida. Necesitamos definir esto para permitir que el algoritmo pruebe una muestra aleatoria de combinaciones.
- random_state: Necesitamos definir este hiperparámetro para obtener la misma salida en múltiples llamadas de función.
La principal desventaja de la búsqueda aleatoria es que produce una alta varianza en múltiples llamadas de funciones de diferentes estados aleatorios.
Este es el final del artículo de hoy.
Avíseme si tiene alguna pregunta o comentarios.
¿Qué tal un curso de IA?
Nos vemos en el próximo artículo. ¡Feliz aprendiendo a ti!
Diseñado y escrito por:
Rukshan Pramoditha
2025–08–22