簡體   English   中英

使用Keras的LSTM對季節數據進行時間序列預測

[英]Time-Series prediction of seasonal data using keras' LSTM

嘗試使用帶有Python的Keras庫的LSTM預測家庭的熱水消耗情況。 觀看了一些教程並參加了Udemy課程,但沒有找到對您有太大幫助的課程(建議多加推薦)。 由於這只是一次問題,所以我真的不想閱讀有關這方面的書籍,這就是為什么我希望我可以依靠SO專家的幫助。 任務:

輸入的是大約1.5年的耗電量,分辨率為1分鍾。 我將此配置文件放入csv,並將其命名為“ labels.csv”。 顧名思義,第二個csv包含“ features.csv”,其中包含最重要的功能:一天中的分鍾,一天中的小時,一周中的一天。 這個想法是,通常在工作日的上午6點至上午8點至下午6點至晚上8點之間以及周末稍晚一些才進行消費。 其他影響因素(如假期,一年中的月份等)均被忽略。 輸出應該是下一周的消費配置文件,即10080行。

首先,我導入相關模型並上傳csv文件。

import pandas as pd
import plotter
from sklearn.model_selection import train_test_split
from keras.models import Sequential
from keras.layers import LSTM
from keras.layers import Dense

features = pd.read_csv('features.csv')
labels = pd.read_csv('labels.csv')

然后將其分為訓練和測試集:

x_train, x_test, y_train, y_test = train_test_split(features,labels,test_size=0.2)

現在定義模型。

model = Sequential()

現在,我添加了圖層(我仍然不知道如何確定應該取多少層以及應該取多少層,但是我可以通過嘗試和錯誤來找出。):

model.add(LSTM(24,activation='relu',input_shape=(1,3)))
model.add(Dense(1))

這樣編譯模型:

model.compile(loss='mse', optimizer="adam")

最后,擬合模型:

model.fit(x_train,y_train,epochs=60,verbose=2)

最后一行的執行產生錯誤:

Traceback (most recent call last):
  File "/home/bruno/Desktop/Python Projects/lstm_dhw_data2/lstm.py", line 24, in <module>
    model.fit(x_train,y_train,epochs=60,verbose=2)
  File "/usr/local/lib/python3.6/dist-packages/keras/engine/training.py", line 952, in fit
    batch_size=batch_size)
  File "/usr/local/lib/python3.6/dist-packages/keras/engine/training.py", line 751, in _standardize_user_data
    exception_prefix='input')
  File "/usr/local/lib/python3.6/dist-packages/keras/engine/training_utils.py", line 128, in standardize_input_data
    'with shape ' + str(data_shape))
ValueError: Error when checking input: expected lstm_1_input to have 3 dimensions, but got array with shape (838860, 3)

所以我什至不去...

results=model.predict(x_test)

print(results)

如果有人可以指出我做錯了什么,請將我指向一個合適的(新手可理解的)教程,或者將我指向一個可以回收的類似項目-我將不勝感激:)

我將項目添加到了我的GitHub

編輯:我也確實收到很多棄用警告,即使

pip install --upgrade tensorflow

返回一切都是最新的...

您唯一遺漏的是,在時間序列中,您需要一個序列作為模型輸入 因此,您的輸入應具有以下形狀[batch_size, lenght_sequence, n_features] 目前,我們可以認為您的數據集由一個大序列組成。 因此,您應該調整數據集的形狀,使其具有不止1個序列以適合模型。 例如,使用來自keras的TimeseriesGenerator在此處為doc,您可以從數據集創建長度為10的序列(或任何最適合您的數據的參數),如下所示:

from keras.preprocessing.sequence import TimeseriesGenerator

sequence_length = 10

data_gen = TimeseriesGenerator(x_train, y_train,
                               length=sequence_length,
                               batch_size=16)

model = Sequential()
model.add(LSTM(24,activation='relu',input_shape=(sequence_length, 3)))
model.add(Dense(1))
model.compile(loss='mse', optimizer="adam")
model.fit_generator(data_gen)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM