Pipeline de Procesamiento y Entrenamiento de Modelos de Datos

Clase 20 de 35Curso de MLOPS: Despliegue de Modelos de Machine Learning

Resumen

¿Cómo dividir tareas para mejorar la claridad y eficiencia del flujo?

El diseño de un flujo de trabajo en la programación debe evitar abarcar demasiadas funciones en una sola tarea. Esto es comparable a crear métodos en clases que lo hacen todo. La clave está en dividir las funcionalidades para facilitar la depuración y el refactorización en un futuro.

Para implementar esto, cuando realizamos una transformación de datos y la división de datos, es esencial leer primero el archivo producto de la tarea anterior del procesamiento de datos. Además, debes tener en cuenta dónde se almacenarán los resultados, generalmente en un módulo de orquestación con una carpeta designada para los datos procesados.

¿Dónde se almacenan los datos procesados?

Dentro de nuestro flujo, los datos procesados se organizan meticulosamente para asegurar la trazabilidad. Por ejemplo, encontramos diferentes carpetas que contienen:

  • El modelo entrenado con sus hiperparámetros óptimos.
  • Datos de entrenamiento y prueba en formato Pickle, lo cual es útil para distinguir con qué datos se entrenó y qué datos se utilizarán para pruebas futuras.
  • Un archivo JSON con el mapeo de ID a cadenas de texto.

Cuando se lleva a cabo la transformación de datos, estos resultados también se almacenan en el folder de datos procesados.

¿Cómo transformar y dividir los datos adecuadamente?

La transformación y división efectiva de datos implica considerar cómo estructuramos el set de datos para su uso en modelos predictivos. Los pasos clave en dicha tarea son:

  1. Lectura del DataFrame: Inicia leyendo el CSV resultante de la tarea previa.

  2. Identificación de características y etiquetas: El texto procesado se reconoce como X (características), y las etiquetas, inicialmente en formato string, se transforman a enteros necesarios para el modelo.

  3. Uso de Convectorizer: Instancia de Convectorizer de Scikit-learn para realizar transformaciones en los datos.

  4. División del conjunto de datos: El conjunto X se divide en datos de entrenamiento y prueba.

    Uso de Convectorizer para transformar los datos

    vectorizer = CountVectorizer() X_transformed = vectorizer.fit_transform(X)

¿Cómo entrenar el mejor modelo en tu flujo?

Agregar una tarea para entrenar el modelo óptimo es vital para mejorar el rendimiento y obtener predicciones más precisas. La función TrainingBestModel se centra en los siguientes aspectos:

  • Datos de entrenamiento y prueba: Recibe estos conjuntos como argumentos esenciales.
  • Hiperparámetros óptimos: Un diccionario con los valores de hiperparámetros que se ubican en config.py.

Para comenzar la experimentación con MLflow, seguimos este enfoque:

  1. Inicialización de experimento: Usar start_run para dar seguimiento al experimento.

  2. Entrenamiento y predicción: Entrenar el modelo y obtener predicciones junto con métricas de performance.

  3. Registro de métricas y modelo: Guardar las métricas y el modelo entrenado como artefacto.

  4. Impresión de informes: Imprimir un reporte clasificado tanto para entrenamiento como para prueba.

    Inicialización y registro del modelo

    with mlflow.start_run(run_name="BestModelRun") as run: model = RandomForestClassifier(**params) model.fit(x_train, y_train) predictions = model.predict(x_test) accuracy = accuracy_score(y_test, predictions) mlflow.log_metric("accuracy", accuracy) mlflow.sklearn.log_model(model, "model")

Al integrar múltiples tareas en el flujo, optimizas los procesos de entrenamiento, asegurando un flujo continuo y eficiente. Cada detalle, desde la configuración de entrada hasta los comentarios en el código, juega un papel fundamental en el éxito del pipeline.