3 votos

Búsqueda aleatoria en un gran conjunto de datos

Tengo un conjunto de datos de 700.000 filas al que estoy aplicando una búsqueda aleatoria. Mi cuadrícula de parámetros tiene el siguiente aspecto:

parameters_gbc = {
"loss":["deviance"],
"learning_rate": [0.01, 0.025, 0.075, 0.1, 0.2],
"max_depth":[3,5,8,10],
"max_features":["log2","sqrt"],
"criterion": ["friedman_mse",  "mae"],
"subsample":[0.5, 0.618, 0.8, 0.85, 0.9, 0.95, 1.0],
"n_estimators":[10, 100, 200, 350]
}

Estoy utilizando 20 iteraciones para la búsqueda:

n_iter_search = 20
random_search_gbc = RandomizedSearchCV(gbc, param_distributions=parameters_gbc,
                                   n_iter=n_iter_search)

No tengo mucha experiencia en esto, así que ¿cuánto tiempo debo esperar para que termine la búsqueda? ¿Cómo puedo hacer que mi búsqueda sea más efectiva en el tiempo ya que ha estado funcionando durante las últimas 30 horas?

0voto

mrzo Puntos 1

La búsqueda aleatoria puede llevar mucho tiempo para un conjunto de datos grande, esto es bastante normal. Debería comprobar el parámetro n_jobs que ayuda a paralelizar la búsqueda y hacerla más rápida ( https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.html ).

Sin embargo, en general hay soluciones más optimizadas para esto, es decir, la optimización bayesiana (echa un vistazo a esta gran entrada del blog con código de python: https://thuijskens.github.io/2016/12/29/bayesian-optimisation/ ). En lugar de seleccionar los hiperparámetros al azar sin ninguna estrategia, la optimización bayesiana trata de encontrar hiperparámetros que conduzcan a mejores resultados que en la última configuración. Se acerca a una solución mejor paso a paso y probablemente en menos tiempo.

0voto

Dipstick Puntos 4869

Con $20$ iteraciones que está explorando $\tfrac{20}{1 \times 4 \times 4 \times 2 \times 2 \times 7 \times 4} \approx 1\%$ de la malla de parámetros, por lo que sólo se exploraría una pequeña fracción del espacio de búsqueda. Se necesitaría muchos más iteraciones que esta.

Para encontrar los parámetros óptimos los algoritmos más inteligentes son la búsqueda aleatoria (por ejemplo, basada en procesos gaussianos, o basado en el árbol ), debería ser más rápido en muchos casos. Aun así, necesitaría muchas más iteraciones para obtener resultados razonables y, dado que la búsqueda aleatoria no tiene sobrecarga, su modelo es un cuello de botella, por lo que esto le llevará algo de tiempo.

La solución definitiva es comprar, o alquilar en la nube) un ordenador mejor, con más CPU, más RAM y con GPU (XGBoost y LightGBM tienen soporte para GPU). Si esto no es una opción, podrías intentar entrenar el modelo en subconjuntos más pequeños de los datos.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X