Python 및 LSTM 딥 러닝 모델을 사용한 에너지 소비 시계열 예측

시계열과 함께 딥 러닝을 사용하는 방법

Unsplash에 David Hellmann의 사진

이 기사의 목적은 딥 러닝을 사용하여 시계열 데이터를 모델링하고 예측할 수있는 매우 직관적이고 쉬운 입력이있는 Python 클래스를 독자에게 제공하는 것입니다. 이상적으로는 독자가이 기사 또는 GitHub 저장소에 제시된 코드를 복사하여 자신의 필요에 맞게 조정하고 (예를 들어 모델에 더 많은 레이어를 추가) 자신의 작업을 사용할 수 있어야합니다.

이 기사에서 사용되는 모든 코드는 여기에서 찾을 수 있습니다.

https://github.com/Eligijus112/deep-learning-ts

이 기사의 데이터는 여기에서 찾을 수 있습니다.

https://www.kaggle.com/robikscube/hourly-energy-consumption

심층 모델링에 사용되는 패키지는 TensorFlow 및 Keras입니다.

시계열은 연속적인 숫자 데이터 포인트의 시퀀스입니다. 이러한 포인트는 종종 정기적 인 간격 (매월, 매일, 매시간 등)으로 측정됩니다. 이 기사에 사용 된 데이터 빈도는 시간당이며 2004–10–01부터 2018–08–03까지 측정되었습니다. 원시 데이터 포인트의 총 수는 121271 입니다.

Python의 시계열 예제

시계열 시각화 :

에너지 소비 시계열에 대한 선 그림

주어진 시계열에 대한 딥 러닝 알고리즘의 주요 목적은 다음 과 같은 함수 f 를 찾는 것 입니다.

Yₜ = f (Yₜ₋₁, Yₜ₋₂,…, Yₜ₋ₚ)

즉, 우리는에 따라 에너지 소비의 현재 값을 설명하는 함수를 추정 할 피의 같은 에너지 소비의 시차를.

이 기사는 장단기 기억 (LSTM) 딥 러닝 네트워크가 시계열 모델링에 좋은 이유 또는 작동 방식을 설명하는 것이 아닙니다. 다음과 같은 훌륭한 기사를 확인하는 리소스 :

Keras에서 LSTM (또는 모든 RNN 계층)을 구현하려면 공식 문서를 참조하십시오.

먼저 데이터를 읽어야합니다.

그런 다음 딥 러닝 모델이 학습을 시작하려면 시계열을 X 및 Y 행렬로 변환하는 함수가 필요합니다. 3 개의 시차를 사용하여 현재 시계열 값을 설명하는 함수를 만들고 싶다고 가정 해 보겠습니다 .

Yₜ = f (Yₜ₋₁, Yₜ₋₂, Yₜ₋₃)

그리고 우리는이 데이터를 가지고 있습니다 :

ts = [1621.0, 1536.0, 1500.0, 1434.0, 1489.0, 1620.0]

X = [
[1621.0, 1536.0, 1500.0], # First three lags
[1536.0, 1500.0, 1434.0], # Second three lags
[1500.0, 1434.0, 1489.0], # Third three lags
]
Y = [1434.0, 1489.0, 1620.0]

딥 러닝 모델에는 LSTM 레이어 (입력 레이어 역할도 함)와 출력 레이어가 있습니다.

인터넷에서 시계열과 함께 사용하기 쉬운 딥 러닝 모델을 검색하는 동안 모델 정의 방법, 모델에 대한 매트릭스 생성 방법 등과 같은 모델링의 여러 부분을 선별 한 다양한 기사를 보았습니다. 사용하기 쉬운 하나의 엔티티로 모든 것을 포장 한 패키지 또는 클래스를 찾으십시오. 그래서 직접하기로 결정했습니다.

수업 시작 :

# Initiating the class
deep_learner = DeepModelTS(
data = d,
Y_var = 'DAYTON_MW',
lag = 6,
LSTM_layer_depth = 50,
epochs = 10,
batch_size = 256,
train_test_split = 0.15
)

데이터 - 모델링에 사용되는 데이터입니다.

Y_var- 모델링 / 예측하려는 변수 이름.

지연 -모델링에 사용되는 지연 수입니다.

LSTM_layer_depth -LSTM 계층의 뉴런 수.

epochs- 훈련 루프 수 (역 전파 주기로의 순 전파).

batch_size- 딥 러닝 모델이 매개 변수를 찾는 데 사용되는 경사 하강 법에 대한 데이터 샘플의 크기입니다. 모든 데이터는 batch_size 크기의 청크로 분할되어 네트워크를 통해 공급됩니다. 모델의 내부 매개 변수는 데이터의 각 batch_size가 모델에서 앞뒤로 이동 한 후에 업데이트됩니다.

시대 및 배치 크기에 대한 자세한 내용은 다음을 참조하십시오.

train_test_split- 테스트에 사용되는 데이터의 공유. 1-train_test_split은 모델 훈련에 사용됩니다.

모델 맞추기 :

# Fitting the model
model = deep_learner.LSTModel()
Keras에서 모델 훈련

더 많은 지연 (따라서 더 큰 X 행렬)으로 모델을 훈련하면 훈련 시간이 늘어납니다.

deep_learner = DeepModelTS(
data = d,
Y_var = 'DAYTON_MW',
lag = 24, # 24 past hours are used
LSTM_layer_depth = 50,
epochs = 10,
batch_size = 256,
train_test_split = 0.15
)
model = deep_learner.LSTModel()
Training of the model with more lags

Yₜ₊₁ = f (Yₜ, Yₜ₋₁,…, Yₜ₋ₚ₊₁)

# Defining the lag that we used for training of the model 
lag_model = 24
# Getting the last period
ts = d['DAYTON_MW'].tail(lag_model).values.tolist()
# Creating the X matrix for the model
X, _ = deep_learner.create_X_Y(ts, lag=lag_model)
# Getting the forecast
yhat = model.predict(X)

yhat = deep_learner.predict()
# Constructing the forecast dataframe
fc = d.tail(len(yhat)).copy()
fc.reset_index(inplace=True)
fc['forecast'] = yhat
# Ploting the forecasts
plt.figure(figsize=(12, 8))
for dtype in ['DAYTON_MW', 'forecast']:
plt.plot(
    'Datetime',
    dtype,
    data=fc,
    label=dtype,
    alpha=0.8
  )
plt.legend()
plt.grid()
plt.show()
Forecasts for the time series

일반적으로 마지막 원래 시계열 데이터보다 앞서 예측하려고합니다. DeepModelTS 클래스 에는 n_ahead 시간 단계 를 예측하는 predict_n_ahead (n_ahead) 메소드가 있습니다.

# Creating the model using full data and forecasting n steps aheaddeep_learner = DeepModelTS(
data=d,
Y_var='DAYTON_MW',
lag=48,
LSTM_layer_depth=64,
epochs=10,
train_test_split=0
)
# Fitting the model
deep_learner.LSTModel()
# Forecasting n steps ahead
n_ahead = 168
yhat = deep_learner.predict_n_ahead(n_ahead)
yhat = [y[0][0] for y in yhat]
시간 범위를 벗어난 예측

결론적으로이 기사에서는 시계열 데이터의 모델링 및 예측 작업을 할 때 간단한 파이프 라인 예제를 제시했습니다.

데이터 읽기 및 정리 (1 시간 단계에 대해 1 행)

지연 수 및 모델 깊이 선택

DeepModelTS () 클래스 시작

모델 피팅

n_steps 앞서 예측

독자가이 기사에 소개 된 코드를 전문적이고 학술적인 작업에 사용할 수 있기를 바랍니다.

Suggested posts

양자 컴퓨팅 Pt를위한 프로그래밍. 1 : NumPy

이제 양자 컴퓨팅이면의 물리학을 배우기 시작 했으므로 "이봐, 실제로 양자 컴퓨터를 사용하려면 실제로 양자 장치를 손으로 만들어야합니까?"라고 궁금해 할 것입니다. 답은 양자 컴퓨터를 컴퓨터라고 부르는 이유가 있습니다. 프로그래밍이 가능합니다! 이 시리즈에서는 수학 개념을 시뮬레이션하고 양자 컴퓨터에서 실행하는 소프트웨어를 구축하는 방법을 배우게됩니다. 깨끗하고 현대적이며 라이브러리가 풍부한 언어이기 때문에 Python을 사용하여 코드를 작성할 것입니다.

IBM Watson Studio의 AutoAI 노트북으로 마술사 코드 깨기

IBM Watson Studio의 AutoAI 노트북으로 마술사 코드 깨기

가장 유명한 행동 강령 중 하나입니다. "마술사는 절대 비밀을 밝히지 않습니다." 그러나 청중이 너무나 놀라워 서 '방금 일어난 일'이라는 느낌에 놀라서 비밀을 밝히지 않는 것이 거의 잔인한 순간이 있습니다.

Related posts

Spotify의 마법 성분 : 기계 학습

Spotify의 마법 성분 : 기계 학습

면책 조항 :이 기사는 Spotify와 관련이 없으며 Spotify 및 현재 관련이 없을 수있는 과거 구조에 대한 확인되지 않은 정보로 구성 될 수 있습니다. 음악은 표현의 한 형태, 예술의 형태, 전체적인 문화 활동입니다.

2021 년 2 월에 읽을 4 가지 딥 러닝 논문

2021 년 2 월에 읽을 4 가지 딥 러닝 논문

신경 과학에서 자동 분화, 신경망 이론 및 신경 과정의 과소 적합에 이르기까지 현재 추구되고있는 다양한 딥 러닝 연구 흐름에 대한 더 나은 개요를 얻고 싶으십니까? 합리적으로 통과하기에는 열려있는 arXiv 탭이 너무 많습니까? 전체 동영상을 볼 시간이 너무 적습니까? 논문의 핵심 아이디어와 개념에 대한 간략한 요약 만 있다면. 그런 다음 '머신-러닝-콜라주'시리즈를 소개하게되어 기쁩니다.

내부의 관심 네트워크 그래프

수학에서 NumPy까지 단계별 가이드

내부의 관심 네트워크 그래프

그래프 신경망 (GNN)은 그래프 데이터에서 학습 할 수있는 표준 도구 상자로 등장했습니다. GNN은 콘텐츠 추천 또는 신약 발견과 같은 다양한 분야에서 영향이 큰 문제를 개선 할 수 있습니다.

분할에 대한 고정 2 부 : Python으로 이미지 분할을 수행하는 방법

분할에 대한 고정 2 부 : Python으로 이미지 분할을 수행하는 방법

안녕하세요! 이미지 분할에 대한이 짧은 시리즈의 첫 번째 부분을 읽지 않았다면 여기에서 읽으십시오. 이전 이야기에서 임계 값 및 색상 분할에 대해 논의 했으므로 2 부에서는 색도 분할과 이미지 차이에 중점을 둘 것입니다.