Muy buenas, les saluda Miguel y aquà les traigo este post.
Índice
Ajuste de hiperparámetros
con GridSearchCV
y RandomizedSearchCV
En este artÃculo, me gustarÃa hablar sobre cómo podemos mejorar el rendimiento de nuestro modelo de aprendizaje automático ajustando los parámetros.
Evidentemente es importante conocer el significado de los parámetros que queremos ajustar para mejorar nuestro modelo.
Por este motivo, antes de hablar de GridSearchCV
y RandomizedSearchCV
, comenzaré explicando algunos parámetros como C
y gamma
.
En la regresión logÃstica y el apoyo Vector clasificador, el parámetro que determina la fuerza de la regularización se llama C
.
Para una C
alta , tendremos una menor regularización y eso significa que estamos tratando de ajustar el conjunto de entrenamiento lo mejor posible. En cambio, con valores bajos del parámetro C
, el algoritmo intenta ajustarse a la «mayorÃa» de los puntos de datos y aumentar la generalización del modelo.
Hay otro parámetro importante llamado gamma. Pero antes de hablar de ello, creo que es importante entender un poco la limitación de los modelos lineales.
Un modelo lineal de clasificación solo puede separar puntos usando una lÃnea, y esa no siempre es la mejor opción. Entonces, la solución podrÃa ser representar los puntos en un espacio tridimensional y no en un espacio bidimensional. De hecho, en un espacio tridimensional, podemos crear un plano que divide y clasifica los puntos de nuestro conjunto de datos de una manera más precisa.
Hay dos formas de mapear sus datos en un espacio de mayor dimensión: el núcleo polinomial, que calcula todos los polinomios posibles hasta cierto grado de las caracterÃsticas originales y el núcleo de la función de base radial (RBF), también conocido como el núcleo de Gauss, que mide la distancia entre puntos de datos.
AquÃ, la tarea de gamma es controlar el ancho del núcleo gaussiano.
Como mostré en mi artÃculo anterior, la validación cruzada nos permite evaluar y mejorar nuestro modelo . Pero hay otra técnica interesante para mejorar y evaluar nuestro modelo, esta técnica se llama Búsqueda de cuadrÃcula.
Grid Search
es un método eficaz para ajustar los parámetros en el aprendizaje supervisado y mejorar el rendimiento de generalización de un modelo. Con Grid Search
probamos todas las combinaciones posibles de los parámetros de interés y encontramos los mejores.
Scikit-aprender
proporciona la clase GridSeaechCV
. Obviamente, primero debemos especificar los parámetros que queremos buscar y luego GridSearchCV
realizará todos los ajustes de modelo necesarios.
Por ejemplo, podemos crear el diccionario a continuación que presenta todos los parámetros que queremos buscar para nuestro modelo.
parameters = ‘C’: [0.001, 0.01, 0.1, 1, 10, 100], ‘gamma’: [0.001, 0.01, 0.1, 1, 10, 100]
Luego podemos instanciar la clase GridSearchCV
con el modelo SVC
y aplicar 6
experimentos con validación cruzada. Por supuesto, también necesitamos dividir nuestros datos en un conjunto de entrenamiento y prueba, para evitar sobreajustar los parámetros.
from sklearn.model_selection import GridSearchCV from sklearn.model_selection import train_test_split from sklearn.svm import SVC search = GridSearchCV(SVC(), parameters, cv=5)X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
Ahora podemos ajustar el objeto de búsqueda que hemos creado con nuestros datos de entrenamiento.
search.fit(X_train, y_train)
Por tanto, el objeto GridSearchCV
busca los mejores parámetros y ajusta automáticamente un nuevo modelo en todo el conjunto de datos de entrenamiento.
RandomizedSearchCV
es muy útil cuando tenemos muchos parámetros para probar y el tiempo de entrenamiento es muy largo. Para este ejemplo, utilizo un clasificador de bosque aleatorio, asà que supongo que ya sabes cómo funciona este tipo de algoritmo.
El primer paso es escribir los parámetros que queremos considerar y de estos parámetros seleccionar los mejores.
param = {'max_depth: [6,9, None],
' n_estimators ': [50, 70, 100, 150],
' max_features ': randint (1,6),
' criterio ': [' gini ',' entropy '],
' bootstrap ': [Verdadero, Falso],
' mln_samples_leaf ': randint (1,4)}
Ahora podemos crear nuestro objeto RandomizedSearchCVÂ
y ajustar los datos. Finalmente, podemos encontrar los mejores parámetros y las mejores puntuaciones.
de sklearn.model_selection importar RandomSearchCV de sklearn.ensemble importar RandomForestClassifierrnd_search = RandomizedSearchCV (RandomForestClassifier (), param, n_iter = 10, cv = 9)rnd_search.fit (X, y) rnd_search.best_params_ rnd_search.best_score_
Sin embargo, si el número de parámetros a considerar es particularmente alto y las magnitudes de influencia están desequilibradas, la mejor opción es utilizar la búsqueda aleatoria.
Espero que te sea de utilidad. Gracias por leer este post.
Añadir comentario