Как проверить новые значения в LSTM в python

1

Я только что создал модель LSTM, которая прогнозирует многомерный массив numpy с использованием временного кадра 7. Индекс столбца колеблется от 1, потому что 0-й индексный столбец фактически является значением даты. Теперь моя модель очень хорошо подходит для теста, установленного до марта 2018 года, для которого у меня есть истинное значение истины. Теперь я хотел предсказать на следующий год. Я застрял в этой части предсказания, потому что у меня нет основополагающей истины, чтобы прокормить модель. Я просто должен дать следующие следующие даты. Не могли бы вы помочь мне, как это предсказание может быть достигнуто? Дайте мне знать, если вам нужны какие-либо подробности, кроме данных. Введите код ниже

 def build_model(NanWah):
NanWah_data_model1=NanWah
list_range=int(NanWah_data_model1.shape[0]*0.8)
rest_list_range=(NanWah_data_model1.shape[0]-list_range)
NanWah_training_set=NanWah_data_model1.iloc[:list_range,1:].values
from sklearn.preprocessing import MinMaxScaler
sc=MinMaxScaler(feature_range=(0,1))  # 0 and 1 scaling it 
NanWah_training_set_scaled=sc.fit_transform(NanWah_training_set)
X_train=[]
y_train=[]
for i in range(7,list_range):
    X_train.append(NanWah_training_set_scaled[i-7:i,:])
    y_train.append(NanWah_training_set_scaled[i])
X_train,y_train=np.array(X_train),np.array(y_train)
X_train=np.reshape(X_train,(X_train.shape[0],X_train.shape[1],13))
from keras.models import Sequential
from keras.layers import LSTM,Dense,Dropout,Activation
regressor=Sequential()
regressor.add(LSTM(units=50,return_sequences=True,input_shape=(X_train.shape[1],13)))
#regressor.add(Dropout(0.20))
regressor.add(LSTM(units=50,return_sequences=True))
#regressor.add(Dropout(0.20))
regressor.add(LSTM(units=50,return_sequences=True))
#regressor.add(Dropout(0.20))
regressor.add(LSTM(units=50,return_sequences=True))
#regressor.add(Dropout(0.20))
regressor.add(LSTM(units=50,return_sequences=False))
regressor.add(Dense(units=13))
regressor.compile(optimizer="adam",loss="mean_squared_error")
regressor.fit(X_train,y_train,epochs=5,batch_size=10)
NanWah_test_set=NanWah_data_model1.iloc[list_range:,1:].values
inputs=NanWah_test_set
inputs=sc.transform(inputs)
X_test=[]
for i in range(7,rest_list_range):
    X_test.append(inputs[i-7:i,:])
X_test=np.array(X_test)
X_test=np.reshape(X_test,(X_test.shape[0],X_test.shape[1],13))
predicted_values=regressor.predict(X_test)
predicted_values=sc.inverse_transform(predicted_values)
predicted_water_m3=predicted_values[:,9:10]
predicted_electricity_kwh=predicted_values[:,7:8]

заранее спасибо

Теги:
deep-learning
lstm

1 ответ

1

Я получил ответ на этот вопрос. Вот что я сделал.

  1. Имейте массив numpy, который имеет последние n значений (где n - время, когда LSTM хочет оглянуться назад)
  2. Снова добавьте 0-й индекс массива numpy.
  3. Изменить его
  4. Предсказать значение с использованием построенной модели
  5. Удалите последний индекс в массиве numpy и добавьте массив с прогнозируемым значением
  6. Продолжайте это, пока не найдете нужное количество значений для записей.

Пример кода приведен ниже:

inputs=Test.values  # this contains the last 60 values of the training record
inputs = inputs.reshape(-1,1)
# Scale inputs but not actual test values
inputs = sc.transform(inputs)
# I am keeping it for 60 look backs and finding only 5 records
for test in range(0,5):
inputs=np.append(inputs,inputs[0])
inputs=inputs.reshape(-1,1)
print(inputs.shape)
X_test=[]
for i in range(60, 61):
    X_test.append(inputs[test:i+test,0])
# make list to array
X_test = np.array(X_test)
print(X_test)
X_test = np.reshape(X_test,(X_test.shape[0], X_test.shape[1],1))
predicted_stock_price = regressor.predict(X_test)
print("for the first iteration {}".format(predicted_stock_price))
inputs=np.delete(inputs,len(inputs)-1,axis=0)
inputs=np.append(inputs,predicted_stock_price)
inputs=inputs.reshape(-1,1)
  • 0
    Привет @SrihariRaghu. Я действительно ценю вашу работу в отношении этого ответа. Я хотел бы спросить одну вещь. Я сталкиваюсь с подобной проблемой для однофакторного прогнозирования временных рядов. Моя проблема в том, что у меня есть ценность до декабря 2018 года (ежемесячно). Сейчас я пытаюсь предсказать на следующий год (2019 год), но не получаю никакой удачи. Я также перепробовал много методов, но у меня ничего не получалось. Любые предложения или помощь с вашей стороны будут высоко оценены.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню