Machine Learning | Trabajar con múltiples fuentes de datos usando ML.NET

Cuando desarrollamos modelos de machine learning normalmente debemos trabajar unificando datos de diferentes fuentes como archivos .csv, bases de datos o integraciones con APIs. Una de las ventajas de la programación orientada a objetos es que podemos desarrollar funciones para recuperar datos de múltiples fuentes e instanciarlos en un mismo objeto, sin depender de la compatibilidad de los paquetes que utilicemos. En este post veremos cómo instanciar el objeto de origen de datos (dataset) desde múltiples fuentes usando el framework ML.NET.

En la arquitectura del desarrollo de un modelo de machine learning con ML.NET debemos siempre tener un objeto que represente el origen de datos (dataset) y que por convención lo llamamos ModelInput. Este objeto se lo puede instanciar con los datos de entrenamiento, pruebas o inferencia.

Usando ML.NET podemos cargar los datos para instanciar el objeto ModelInput desde un archivo .csv, desde una tabla en SQL Server, o desde cualquier otra fuente usando un objeto Enumerable. Veamos un ejemplo de una función que utiliza estas tres funcionalidades para cargar datos para el entrenamiento de un modelo.

private static IDataView LoadDataView(string source)
{
    IDataView trainingDataView;

    if (source == "textFile")
    {
        var tmpPath = GetAbsolutePath(TRAIN_DATA_FILEPATH);
        trainingDataView = mlContext.Data.LoadFromTextFile<ModelInput>(
                                    path: tmpPath, hasHeader: true,
                                    separatorChar: '\t', allowQuoting: true,
                                    allowSparse: false);
    }
    else if (source == "SQL")
    {
        DatabaseLoader loader = mlContext.Data.CreateDatabaseLoader<ModelInput>();
        DatabaseSource dbSource = new DatabaseSource(SqlClientFactory.Instance, CONNECTION_STRING, SQL_COMMAND);
        trainingDataView = loader.Load(dbSource);
    }
    else
    {
        //Load form a json file or a rest API
        var data = File.ReadAllText("json1.json");
        var inMemoryCollection = JsonConvert.DeserializeObject<IEnumerable<ModelInput>>(data);

        trainingDataView = mlContext.Data.LoadFromEnumerable<ModelInput>(inMemoryCollection);
    }

    return trainingDataView;
}

En el código anterior se observa las tres funciones que tiene el objeto mlContext.Data para cargar datos al ModelInput

  • LoadFromTextFile() Carga datos desde cualquier archivo .csv o .tsv
  • CreateDatabaseLoader() Carga datos desde una base SQL Server o Azure SQL
  • LoadFromEnumerable() Carga datos desde cualquier lista, se puede usar para cargar datos desde una API o desde un archivo json

Con esta sencilla función podemos cargar datos tanto para el entrenamiento de un modelo o para realizar predicciones de un modelo ya entrenado.

Artículos relacionados: Cómo predecir más de una categoría usando ML.NET

Artículos relacionados: Segmentación de clientes usando ML.NET

Publicado por Diego Zumarraga Mera

Experto en transformación digital, Machine Learning, Desarrollo Web, Arquitecto Azure

A %d blogueros les gusta esto: