python python-3.x python-2.7 tensorflow keras

python - ¿Cómo usar el modelo de Keras para pronosticar fechas o eventos futuros?



python-3.x python-2.7 (1)

Bueno, necesita un modelo con stateful=True , por lo que puede alimentar una predicción tras otra para obtener la siguiente y mantener el modelo pensando que cada entrada no es una secuencia nueva, sino una secuela de la anterior.

Arreglando el código y entrenando

Veo en el código que hay un intento de hacer que su y sea ​​un cambio x (una buena opción para predecir los próximos pasos). Pero también hay un gran problema en el preprocesamiento aquí:

training_set = df_train.values training_set = min_max_scaler.fit_transform(training_set) x_train = training_set[0:len(training_set)-1] y_train = training_set[1:len(training_set)] x_train = np.reshape(x_train, (len(x_train), 1, 1))

Los datos para las capas LSTM deben tener la forma de (number_of_sequences, number_of_steps,features) .

Entonces, claramente está creando secuencias de solo 1 paso, lo que significa que su LSTM no está aprendiendo secuencias en absoluto. (No hay secuencia con un solo paso).

Suponiendo que sus datos son una única secuencia única con 1 característica, definitivamente debe tener la forma de (1, len(x_train), 1) .

Naturalmente, y_train también debería tener la misma forma.

Esto, a su vez, requerirá que sus capas LSTM sean return_sequences=True : la única forma de hacer que tenga una longitud en pasos. Además, para tener una buena predicción, es posible que necesite un modelo más complejo (porque ahora será un verdadero aprendizaje).

Hecho esto, entrena a su modelo hasta que obtenga un resultado satisfactorio.

Prediciendo el futuro

Para predecir el futuro, necesitará capas stateful=True LSTM.

Antes de nada, restablece los estados del modelo: model.reset_states() : necesario cada vez que ingresa una nueva secuencia en un modelo con estado.

Luego, primero predice todo el X_train (esto es necesario para que el modelo entienda en qué punto de la secuencia se encuentra, en palabras técnicas: para crear un estado).

predictions = model.predict(`X_train`) #this creates states

Y finalmente creas un bucle donde comienzas con el último paso de la predicción anterior:

future = [] currentStep = predictions[:,-1:,:] #last step from the previous prediction for i in range(future_pred_count): currentStep = model.predict(currentStep) #get the next step future.append(currentStep) #store the future steps #after processing a sequence, reset the states for safety model.reset_states()

Ejemplo

Este código hace esto con una secuencia de 2 características, una predicción de pasos futuros modificada y un método que es un poco diferente de esta respuesta, pero basado en el mismo principio.

Creé dos modelos (uno con stateful=False , para entrenar sin necesidad de restablecer estados cada vez, nunca olvide restablecer estados cuando está comenzando una nueva secuencia) y el otro con stateful=True , copiando los pesos del modelo entrenado, para prediciendo el futuro)

https://github.com/danmoller/TestRepo/blob/master/TestBookLSTM.ipynb

Aquí está mi código para entrenar el modelo completo y guardarlo .:

num_units = 2 activation_function = ''sigmoid'' optimizer = ''adam'' loss_function = ''mean_squared_error'' batch_size = 10 num_epochs = 100 # Initialize the RNN regressor = Sequential() # Adding the input layer and the LSTM layer regressor.add(LSTM(units = num_units, activation = activation_function, input_shape=(None, 1))) # Adding the output layer regressor.add(Dense(units = 1)) # Compiling the RNN regressor.compile(optimizer = optimizer, loss = loss_function) # Using the training set to train the model regressor.fit(x_train, y_train, batch_size = batch_size, epochs = num_epochs) regressor.save(''model.h5'')

Después de eso, he visto que la mayoría de las veces la gente sugiere el conjunto de datos de prueba para verificar la predicción que también intenté y obtuve buenos resultados.

Pero el problema está en el uso del modelo que he creado. Quiero tener un pronóstico para los próximos 30 días o cada minuto. Ahora tengo el modelo entrenado pero no obtengo lo que puedo hacer o qué código uso para usar el modelo y pronosticar los precios para los próximos 30 días o un minuto.

Por favor sugiérame la salida. Estoy atrapado en este problema desde hace una semana y no puedo hacer ningún intento exitoso.

Aquí está el enlace del repositorio donde se puede encontrar el código ejecutable completo, el modelo y el conjunto de datos .: Mi enlace del repositorio