es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Entrenando un LSTM a partir de múltiples archivos CSV.

Tengo un conjunto de datos compuesto por muchos archivos CSV. Cada archivo contiene una serie de fechas y un número, y cada uno es una serie independiente y no está relacionado con el resto de los archivos anteriores. El objetivo es predecir la próxima fecha y el número asociado a ella para cada archivo CSV individualmente en el futuro. Me gustaría usar una LSTM para resolver este problema, pero no sé cómo alimentar los datos.

Aquí hay una muestra de los datos:

año mes día cantidad
2020 09 06 12.50
2020 09 10 12.50
2020 09 19 124.00
2020 10 2 13.06
2020 10 06 12.50

Por ahora he escrito un código que separa los datos en entrenamiento y prueba (según el nombre de los archivos y una proporción de 75% a 25%). Aquí está el código:

INPUT_DATA_DIR = "dir/"
TRAIN_DATA_COEFFICIENT = 0.75

files = []

for (dirpath, dirnames, filenames) in os.walk(INPUT_DATA_DIR):
    files.extend(filenames)
    break

train_files_finish = int(len(files) * TRAIN_DATA_COEFFICIENT)
train_files = files[0:train_files_finish]
validation_files = files[train_files_finish:len(files)]
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para alimentar los datos a un modelo LSTM, deberás seguir los siguientes pasos:

    1. Cargar cada archivo CSV como un DataFrame de pandas.
    2. Normalizar los datos.
    3. Convertir el DataFrame en un array de numpy.
    4. Reshape el array de numpy en un array tridimensional.
    5. Dividir los datos en conjuntos de entrenamiento y prueba.

    Aquí está el código:

    import os
    import pandas as pd
    import numpy as np
    from sklearn.preprocessing import MinMaxScaler
    
    # Paso 1: Cargar cada archivo CSV como un DataFrame de pandas
    INPUT_DATA_DIR = "dir/"
    files = []
    
    for (dirpath, dirnames, filenames) in os.walk(INPUT_DATA_DIR):
        files.extend(filenames)
    
    dataframes = []
    
    for file in files:
        df = pd.read_csv(os.path.join(INPUT_DATA_DIR, file))
        dataframes.append(df)
    
    # Paso 2: Normalizar los datos
    scalers = []
    
    for i in range(len(dataframes)):
        scaler = MinMaxScaler(feature_range=(0, 1))
        scaled_data = scaler.fit_transform(dataframes[i]["amount"].values.reshape(-1, 1))
        dataframes[i]["amount"] = scaled_data
        scalers.append(scaler)
    
    # Paso 3: Convertir el DataFrame en un array de numpy
    data = []
    
    for df in dataframes:
        data.append(df["amount"].values)
    
    # Paso 4: Reshape el array de numpy en un array tridimensional
    data = np.array(data)
    data = np.reshape(data, (data.shape[0], data.shape[1], 1))
    
    # Paso 5: Dividir los datos en conjuntos de entrenamiento y prueba
    split_index = int(len(data) * 0.75)
    
    train_data = data[:split_index, :]
    test_data = data[split_index:, :]
    

    Una vez que tengas los datos en el formato adecuado, puedes crear un modelo LSTM y entrenarlo con los datos de entrenamiento. Luego puedes usar el modelo entrenado para hacer predicciones sobre los datos de prueba.

Comments are closed.