¿Cómo seleccionar y optimizar modelos utilizando validación cruzada?
La selección y optimización de modelos de aprendizaje automático es una tarea crucial pero a menudo compleja. Encontrar el modelo adecuado no es suficiente; también hay que ajustar y optimizar sus parámetros para lograr el mejor desempeño posible. Esta tarea puede volverse tediosa, especialmente cuando se realizan pruebas manuales de cada parámetro.
¿Cuáles son las soluciones ofrecidas por Scikit-learn?
Scikit-learn, una biblioteca popular de aprendizaje automático en Python, nos ofrece tres enfoques diferentes para optimizar parámetros:
Búsqueda manual:
Consiste en seleccionar un modelo, explorar su documentación, identificar parámetros relevantes y probar combinaciones hasta encontrar la mejor.
Es un proceso meticuloso y puede ser muy costoso en términos de tiempo y recursos computacionales.
Búsqueda en malla (Grid Search):
Este enfoque sistemático utiliza una matriz de parámetros y ejecuta pruebas exhaustivas para todas las combinaciones posibles, buscando la mejor configuración.
Se define mediante un diccionario donde se especifican los parámetros y sus posibles valores.
from sklearn.model_selection import GridSearchCV
# Definición de parámetros para GridSearchparametros ={'C':[1,10,100],'kernel':['linear','rbf']}# Implementación del GridSearchCVgrid_search = GridSearchCV(estimator=SVC(), param_grid=parametros, cv=5)grid_search.fit(X_train, y_train)
Búsqueda aleatorizada (Randomized Search):
Similar al Grid Search, pero en lugar de probar todas las combinaciones, selecciona aleatoriamente un número determinado de ellas, dentro de los rangos especificados.
Funciona bien para cuando no se dispone de mucho tiempo o recursos.
from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import expon
# Configuración de parámetros para RandomizedSearchparametros_rand ={'C': expon(scale=100),'gamma': expon(scale=0.1),'kernel':['linear','rbf'],'class_weight':['balanced',None]}# Implementación de RandomizedSearchCVrandom_search = RandomizedSearchCV(estimator=SVC(), param_distributions=parametros_rand, n_iter=10, cv=5)random_search.fit(X_train, y_train)
¿Cuándo utilizar cada tipo de búsqueda?
Grid Search es ideal cuando se quiere hacer un análisis exhaustivo de todas las combinaciones posibles de parámetros, garantizando así que se encuentre la mejor configuración.
Randomized Search es más adecuado si se cuenta con limitaciones de tiempo o recursos computacionales, o si se busca una solución rápida y eficiente para experimentar con diferentes configuraciones.
La elección del método depende mucho del problema específico y de las limitaciones del proyecto. En cualquier caso, estos enfoques automáticos permiten un aprovechamiento más eficaz del tiempo y los recursos, facilitando un análisis riguroso desde una perspectiva más sistemática. Así que a seguir explorando, la ciencia de datos es un campo vasto y lleno de oportunidades para aprender e innovar.
++Optimización de hiperparametros | Hyperparameter Optimization++
Familiarizados con el concepto de Cross Validation vamos a utilizar este mismo principio de fondo para lograr automatizar un poco la selección y optimización de nuestros modelos.
Problema: Parece que encontramos un modelo de aprendizaje que parece funcionar, pero esto puede implicar que ahora tenemos que encontrar la optimización de cada uno de los parámetros de este modelo, encontrar el que mejor se ajuste y el que mejor resultado nos de.
Es facil perderse entre los conceptos de tantos parámetros. Tenemos flexibilidad para algoritmos básicos de Machine Learning, pero facil perderse.
Es difícil medir la sensibilidad de los mismos manualmente.
Es COSTOSO, en tiempo humano y computacionalmente.
Scikit Learn nos ofrece enfoques para automatizar el proceso de optimización paramétrica. Existen 3 enfoques principales, estos son:
Optimización manual
Optimizacion por grilla de parámetros | GridSearchCV
Optimizacion por búsqueda aleatorizada |
.
.
++Optimización manual++
Escoger el modelo que queremos ajustar.
Buscar en la documentación de Scikit-Learn
Identificar parámetros y ajustes. Parámetros que vamos a necesitar y cuáles son los posibles ajustes que vamos a requerir para cada uno de estos parámetros.
Probar combinaciones una por una iterando a través de listas.
.
.
++Optimizacion por grilla de parámetros | GridSearchCV++
Es una forma organizada, exhaustiva y sistematica de probar todos los parametros que le digamos que tenga que probar, con los respectivos rangos de valores que le aportemos.
Definir una o varias métricas que queremos optimizar.
Identificar los posibles valores que pueden tener los parámetros.
Crear un diccionario de parámetros.
Usar Cross Validation.
Entrenar el modelo (e ir por un café)
La grilla de parámetros nos define GRUPOS DE PARÁMETROS que serán probados en todas sus combinaciones (Un grupo a la vez)
Ejemplo:
!svm-gridsearch-optimized
.
.
++Optimizacion por búsqueda aleatorizada | RandomizedSearchCV++
Si no tenemos tanto tiempo para una prueba tan exhaustiva o queremos combinaciones aleatorias usaremos este metodo. Es lo mismo que el caso anterior, pero busca de forma aleatoria los parametros y Scikit Learn selecciona los mejores de las combinaciones aleatorias que se hicieron.
En este método, definimos escalas de valores para cada uno de los parámetros seleccionados, el sistema probará varias iteraciones (Configurables según los recursos) y mostrará la mejor combinación encontrada.
Ejemplo:
!svm-randomized-search-optimized
.
.
++GridSearchCV vs RandomizedSearchCV++
GridSearchCV
Cuando se quiera realizar un estudio a fondo sobre las implicaciones de los parámetros.
Se tenga tiempo.
Se tenga poder de procesamiento.
RandomizedSearchCV
Cuando se quiera explorar posibles optimizaciones.
Haya poco tiempo.
Haya poco poder de procesamiento.
!GridSearch-vs-RandomizedSearch
Muy completo tu resumen amigo 📝💡
Excelente!
Todo super claro! Excelente explicación
Sí, muy bien explicado 📝
En la imagen de busqueda por guillas, me parece que el parametro C debe cambiar a 1,10 y 100.
Siip, Yo tambien me he dado cuenta de eso, C debe cambiar de 1,10,100, en la imagen C se mantuvo constante.
En el uso de GridSearch se puede iterar por distintos modelos y proporciones de Train/Test como en por ejemplo es ente clasificador obteniendo resultados como el siguiente:
.
Esta genial la clase! Además en recursos hay otras clases relacionadas con este tema. Vale la pena explorar las
La clase se centró en la optimización paramétrica en Machine Learning utilizando la biblioteca Scikit-Learn. Se discutieron tres métodos: optimización manual, búsqueda en cuadrícula (Grid Search) y búsqueda aleatorizada (Random Search). La optimización manual implica probar cada combinación de parámetros de forma exhaustiva, lo que puede ser tedioso y costoso. La búsqueda en cuadrícula permite probar sistemáticamente todas las combinaciones definidas en un diccionario, mientras que la búsqueda aleatorizada prueba combinaciones aleatorias dentro de los rangos establecidos, proporcionando una alternativa más rápida.
Optimización por Grilla de Parámetros (GridSearchCV):
La optimización por parrilla de parámetros es una técnica que automatiza la búsqueda de la mejor combinación de hiperparámetros para un modelo. Se proporciona una cuadrícula de valores posibles para cada hiperparámetro que se desea optimizar, y se realiza una búsqueda exhaustiva de todas las combinaciones posibles mediante validación cruzada para determinar cuál proporciona el mejor rendimiento.
Optimización por Búsqueda Aleatorizada (RandomizedSearchCV):
La optimización por búsqueda aleatoria es una técnica similar a la optimización por grilla de parámetros, pero en lugar de buscar todas las combinaciones posibles, selecciona aleatoriamente un subconjunto de combinaciones para evaluar. Esto es útil cuando la cuadrícula de búsqueda es muy grande y realizar una búsqueda exhaustiva sería costosa en términos de tiempo y recursos computacionales.
La optimización manual es un enfoque práctico pero laborioso, mientras que GridSearchCV y RandomizedSearchCV automatizan la búsqueda de hiperparámetros, siendo RandomizedSearchCV más eficiente cuando la búsqueda es costosa. Estas técnicas son esenciales para ajustar los modelos de aprendizaje automático para obtener un rendimiento óptimo.
Una pregunta a la hora de trabajar profesionalmente usando Machine Learning, ¿se deja de lado utilizar el enfoque de Hold-Out y solo nos concentramos en Cross Validation, para aquellos que apenas estamos aprendiendo?
Mas que decir que hay una regla, es mejor decir que es un arte. Como dijo el profesor, todos los modelos son malos, solo que hay unos que la sacan del estadio. Siempre es ir con mentalidad de Testeo, probar nuevas, e ir implmentado y ver como los datos se comporta. Te recomiendo usar los dos, y mirar como se comporta los valores
Dejo estas dos metáforas para que se entienda mejor:
Grid Search: Caperucita está muy meticulosa. Decide probar todas las posibles combinaciones de caminos que conoce, y aunque esto es muy exhaustivo y le toma mucho tiempo, ella está segura de que encontrará la mejor ruta. Cada vez que prueba un camino, toma nota de cuántos árboles y flores encuentra y si hay lobos en el trayecto. Al final, elige la mejor ruta basada en todas esas pruebas.
Random Search: Esta vez, Caperucita es más pragmática. En lugar de probar todas las rutas posibles, elige caminos de manera aleatoria y anota los resultados de cada uno. Con suerte, encontrará una ruta eficiente sin probar todas, y le llevará menos tiempo que con Grid Search.
Conclusión: La optimización paramétrica es como Caperucita probando diferentes caminos para llegar a casa de su abuela, ajustando su enfoque con cada intento para encontrar la ruta más rápida y segura.
<u>Validation Cross Concept</u>
Cross-validation (CV) is a general technique used in machine learning to evaluate the performance of a model and avoid overfitting. It involves splitting the available data into training and testing sets in a way that allows you to estimate how well the model will generalize to unseen data. Here's a breakdown of the concept:
The Problem of Overfitting:
Imagine you're training a model to classify handwritten digits (0-9). If you simply train the model on all the available data and then evaluate its performance on the same data, it might achieve very high accuracy. However, this doesn't necessarily mean the model will perform well on completely new digits it hasn't seen before. The model might have simply memorized the training data patterns without truly learning the underlying features that distinguish the digits. This is called overfitting.
How Cross-Validation Helps:
Cross-validation addresses the overfitting problem by introducing a more rigorous evaluation strategy. Here's the general approach:
Data Splitting: The available data is divided into two or more sets:
Training Set: This set is used to train the model. The model learns patterns and relationships from this data.
Testing Set: This unseen data is used to evaluate the model's performance on new data it hasn't been trained on specifically.
Iteration (Optional):
Some CV techniques involve multiple rounds of training and evaluation. They split the data further into smaller folds and iterate through these folds, using different folds for training and testing in each round. This provides a more robust estimate of the model's generalizability.
Evaluation Metrics: After training on the training set, the model makes predictions on the testing set. These predictions are compared to the actual target values in the testing set using an appropriate evaluation metric. Common metrics include:
Reduced Variance: By using a separate testing set or iterating through multiple folds, CV helps reduce the variance in the model's performance estimate. A single split of the data might be overly optimistic or pessimistic, whereas CV provides a more stable measure.
Better Generalizability: The use of unseen data for evaluation allows for a more realistic assessment of how well the model performs on new, unseen data. This helps avoid overfitting and improves the model's ability to generalize.
Efficient Use of Data: CV utilizes the entire dataset for both training and validation, maximizing the information extracted from the available data.
Types of Cross-Validation:
There are several variations of cross-validation, each with its own advantages and disadvantages. Here are some common types:
Holdout: This is the simplest form, where the data is split into a single training set and a single testing set. It's easy to implement but can be susceptible to variance depending on the specific split.
K-Fold CV: This technique splits the data into k folds (e.g., k=5 or k=10) and iterates k times, each time using k-1 folds for training and the remaining fold for validation. The evaluation metrics are then averaged across all folds.
Stratified K-Fold CV: This is a variation of K-Fold CV that ensures each fold maintains the same class distribution as the original data, which is important for imbalanced datasets.
In conclusion, cross-validation is a crucial technique in machine learning for evaluating model performance and avoiding overfitting. It allows for a more robust and generalizable assessment of how well a model performs on unseen data.