Модель keras LSTM для временных рядов не работает - PullRequest
0 голосов
/ 31 марта 2020

Я использую приведенный ниже код для прогнозирования данных временных рядов. Я использовал данные Quandl для этого. Но тот же код работает для бота набора данных, не работает для другого. Там нет ошибок компиляции. Но после этапа построения модели я не получаю никаких результатов.

Код:

import pandas as pd
import quandl
quandl.ApiConfig.api_key = 'my-quandl-code'
import matplotlib.pyplot as plt
pd.plotting.register_matplotlib_converters()

col = "Net"
df = quandl.get("ISM/MAN_PROD")  #Not working for this dataset

#col = "High" 
#df = quandl.get("EOD/HD") Works for this datset

df = df[col]
df = df.reset_index()
df =df.rename(columns = {"Date":"ds",col:"y"})

from sklearn.preprocessing import MinMaxScaler
values = df['y'].values.reshape(-1,1)
values = values.astype('float32')
scaler = MinMaxScaler(feature_range=(0, 1))
scaled = scaler.fit_transform(values)

train_size = int(len(scaled) * 0.9)
test_size = len(scaled) - train_size
train, test = scaled[0:train_size,:], scaled[train_size:len(scaled),:]
print(len(train), len(test))

def create_dataset(dataset, look_back=1):
    dataX, dataY = [], []
    for i in range(len(dataset) - look_back):
        a = dataset[i:(i + look_back), 0]
        dataX.append(a)
        dataY.append(dataset[i + look_back, 0])
    print(len(dataY))
    return np.array(dataX), np.array(dataY)

import numpy as np
look_back = 5
trainX, trainY = create_dataset(train, look_back)
testX, testY = create_dataset(test, look_back)

trainX = np.reshape(trainX, (trainX.shape[0], 1, trainX.shape[1]))
testX = np.reshape(testX, (testX.shape[0], 1, testX.shape[1]))

import keras
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
model = Sequential()
model.add(LSTM(100, input_shape=(trainX.shape[1], trainX.shape[2])))
model.add(Dense(1))
model.compile(loss='mae', optimizer='adam')
history = model.fit(trainX, trainY, epochs=300, batch_size=100, validation_data=(testX, testY), verbose=0, shuffle=False)
plt.plot(history.history['loss'], label='train')
plt.plot(history.history['val_loss'], label='test')
plt.legend()
plt.show()

, пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

Проблема связана с некоторыми нулевыми значениями в наборе данных. Я удалил его и он работает. Спасибо.

0 голосов
/ 31 марта 2020

Попробуйте изменить эту строку:

history = model.fit(trainX, trainY, epochs=300, batch_size=100, validation_data=(testX, testY), verbose=0, shuffle=False)

на:

history = model.fit(trainX, trainY, epochs=10, batch_size=100, validation_data=(testX, testY), verbose=1, shuffle=False)

Другими словами, сначала тренируйтесь с меньшим количеством эпох, и установите verbose=1 так, чтобы ваша программа печатала на stdout прогресс вашего обучения. Если это выполнится успешно, вы можете изменить вышеприведенную строку на оригинал с большим количеством эпох и 0 многословием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...