El grid search en Python es un método de búsqueda que toma en cuenta diferentes combinaciones de hiperparámetros y elige la combinación que arroja un margen de error más bajo.
¿Cómo funciona el grid search en Python?
El grid search en Python funciona por medio de la comparación: se toman dos valores de un conjunto pequeño de valores para dos o más parámetros, se evalúan todas las combinaciones posibles y con ellas se forma una cuadrícula de valores (traducción de grid search).
El grid search en Python ayuda a la optimización de hiperparámetros.
Hiperparámetros y parámetros
Los hiperparámetros son parámetros de aprendizaje automático que se eligen antes de que el proceso de aprendizaje automático comience y son ayudados por el grid search in python. Son ajustables y pueden afectar directamente a la forma en la que se entrena un modelo de aprendizaje automático.
Algunos de estos hiperparámetros son:
- Número de épocas.
- Impulso.
- Constante de regularización.
- Número de ramas en un árbol de decisión.
- Número de clústeres en un algoritmo de agrupamiento.
- Descenso de gradientes.
- Elección del costo o pérdida que utilizará un modelo.
- Número de capas ocultas en n-actividad.
- Tasa de abandono en n-entidad.
- Tamaño del kernel.
- Tamaño del lote.
- Parámetros.
La diferencia entre un parámetro y un hiperparámetro es que el segundo lo utilizan los algoritmos de aprendizaje cuando este apenas está aprendiendo, pero no son partícipes en el modelo que resulta de este aprendizaje.
Los hiperparámetros son flexibles, ya que se refieren a cualquier elemento en el machine learning y el deep learning que decida sus valores o elija su configuración antes de que comience el entrenamiento y cuyos valores permanecen iguales cuando se finaliza el entrenamiento.
Los parámetros, por su lado, son características inherentes al modelo. Esto quiere decir que se aprenden o se estiman a partir de los datos brindados durante el entrenamiento, ya que el algoritmo que se use intentará aprender el mapeo entre las características de entrada y los objetivos.
Algunos ejemplos de parámetros son:
- Coeficientes de modelos de regresión lineal y logística.
- Pesos y sesgos de -n.
- Centroides del clúster en un agrupamiento.
Los parámetros, por tanto, son los valores que el algoritmo de aprendizaje puede cambiar de forma deliberada a medida que aprende y estos valores se van viendo afectados por la elección de los hiperparámetros que se proporcionen.
En resumen, los hiperparámetros se establecen antes de que comience el entrenamiento y el algoritmo de aprendizaje los usa para aprender los parámetros, con ayuda de grid search in Python.
Grid search en Python vs. RandomizedSearch
El grid search en Python es eficaz cuando se requiere ajustar parámetros en aprendizaje supervisado y mejorar el rendimiento de generalización de un modelo.
El grid search en Python proporcionado por GridSearchCV genera candidatos a partir de una cuadrícula de valores de parámetros especificados con el parámetro param_grid de grid search in Python:
param_grid = [
{'C': [1, 10, 100, 1000], 'núcleo': ['lineal']},
{'C': [1, 10, 100, 1000], 'gamma': [0.001, 0.0001], 'núcleo': ['rbf']},
]
Esta instancia del grid search evalúa todas las combinaciones posibles con los datos implementados y conserva la mejor combinación.
El RandomizedSearch es útil cuando se tienen muchos parámetros para probar y el tiempo de entrenamiento es muy largo.
Este método realiza una búsqueda aleatoria sobre parámetros, donde cada configuración se muestrea a partir de una distribución sobre posibles valores de parámetros del grid en Python.
Los parámetros se muestren gracias al uso de un diccionario de grid search. Sumado a esto, se especifica un presupuesto de cálculo, que es el número de personas que se muestrearon o de iteraciones de muestreo; esto se hace mediante el parámetro n_iter:
{'C': scipy.stats.expon(escala=100), 'gamma': scipy.stats.expon(escala=.1),
'núcleo': ['rbf'], 'class_weight':['equilibrado', Ninguno]}
Intuitivamente, parece que usar un grid search en Python sea lo más lógico; no obstante, los resultados del RandomizedSearch pueden funcionar mejor.
Veamos un ejemplo (no está en Python):
Vamos a agrupar barrios por metros cuadrados. Podemos usar una matriz de similaridad de Tukey (con parámetros), ya que no estamos con grid en Python:
In [ ]: tky <- TukeyHSD (aov ( formula = Square.Meters ~ Neighbourhood, data = df_madrid ))
tky.result <- data.frame (tky$Neighbourhood)
cn <- sort (unique (df_madrid$Neighbourhood))
resm <- matrix (NA, length (cn), Length(cn))
rownames(resm) <- cn
colnames resm <- cn
resm [lower.tri (resm)] <- round (tky.result$p.adj, 4)
resm [upper.tri(resm)] <- t (resm) [upper.tri (resm)]
diag (resm) <- 1
library (ggplot2)
library (reshape2)
dfResm <- melt (resm)
ggplot (dfResm, aes (x = Var1, y = Var2, fill = value)) +
geom_tile (colour = "black")+
scale_fill_gradient (low = "white", high = "steelblue") +
ylab ("Class") + xlab ("Class") + theme_bw() +
theme (axis.text.x = element_text (angle = 98, hjust = 1),
legend.position = "none")
Usando como variable de distancia 1-resim, dibuja un dendrograma de los diferentes barrios con la opción grid en Python.
¿Qué sigue?
El grid search en Python es una buena opción a la hora de hacer comparaciones estadísticas, aunque existen otras opciones, como el randomizedsearch que también pueden ser muy útiles. Todo depende de lo que necesites.
En todo caso, recuerda que las temáticas abordadas sobre grid search las puedes encontrar dentro de nuestro Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp, con el que podrás, en muy poco tiempo, incursionar en el mercado laboral y obtener mejores empleos. ¡Solicita información ahora!