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.

Cómo transformar un dataframe en un conjunto de datos de TensorFlow para el modelo GRU? ValueError: (Tipo de numpy no compatible: NPY_DATETIME)

Intento crear un modelo GRU pero me encuentro con un problema al configurar la marca de tiempo.

Aquí está mi ejemplo de entrada:

Date = ['2021-08-06', '2021-08-07', '2021-08-08', '2021-08-09', '2021-08-10']
Date = pd.to_datetime(Date)
Close_SP = [4436.52, 4436.52, 4436.52, 4432.35, 4436.75]
Close_DJ = [333.96, 333.96, 333.96, 332.12, 328.85]
Close_Nasdaq = [14835.8, 14835.8, 14835.8, 14860.2, 14788.1]
X = pd.DataFrame({'Close_SP': Close_SP, 'Close_DJ': Close_DJ, 'Close_Nasdaq': Close_Nasdaq}, index = Date)
X.head()

Cerrar_SP Cerrar_DJ Cerrar_Nasdaq

2021-08-06  4436.52 333.96  14835.8
2021-08-07  4436.52 333.96  14835.8
2021-08-08  4436.52 333.96  14835.8
2021-08-09  4432.35 332.12  14860.2
2021-08-10  4436.75 328.85  14788.1

El tamaño de entrada del modelo GRU es (tamaño del lote, marca de tiempo, características), así que planeo obtener primero los datos de fecha y características, y luego combinarlos.

x1 = tf.convert_to_tensor(X.index)
x2 = tf.convert_to_tensor(X)
input = tf.data.Dataset.zip((x1, x2))

Sin embargo, me encuentro con un ValueError: No se pudo convertir una matriz NumPy a un tensor (tipo de NumPy no compatible: NPY_DATETIME)

Entonces, ¿cómo soluciono el problema? ¿Hay otra forma eficiente de alcanzar mi objetivo?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error sugiere que Tensorflow no admite el tipo datetime. Para solucionar esto, puedes convertir los objetos datetime en floats o enteros que representen el número de segundos/milisegundos desde cierta época utilizando el método datetime.timestamp().

    Alternativamente, puedes usar el accesor pd.Series.dt para extraer características como año, mes, día, etc. y concatenarlas a tu dataframe.

    Por ejemplo, para extraer las características de año, mes y día, puedes hacer lo siguiente:

    X['Año'] = X.index.year
    X['Mes'] = X.index.month
    X['Día'] = X.index.day
    

    Luego, puedes remodelar tus datos utilizando el método tf.reshape():

    batch_size = 1
    timestamp = len(X.index)
    features = len(X.columns)
    
    input = tf.reshape(X.values, shape=(batch_size, timestamp, features))
    

    Esto te dará un tensor de forma (1, 5, 4), que representa un lote de un paso de tiempo y cuatro características.

    Ten en cuenta que es posible que debas ajustar los parámetros batch_size y timestamp según tu caso de uso.

    En general, es importante preprocesar tus datos de manera que el modelo pueda manejarlos. En este caso, remodelar el dataframe en el formato deseado es un paso necesario.

Comments are closed.