티스토리 뷰
이번 글에서는 시계열 예측을 위한 딥러닝 방법을 설명하고자 합니다.
우선 시계열 입력데이터를 지도 학습 형식으로 변환하는 방법을 알아봅니다.
실제 기계 학습의 대부분은 지도 학습을 사용합니다.
지도 학습은 입력 변수(X)와 출력 변수(y)가 있고 알고리즘을 사용하여 입력에서 출력으로의 매핑 함수를 학습하는 것입니다.
목표는 새로운 입력 데이터가 있을 때 해당 데이터에 대한 출력 변수를 예측할 수 있도록 실제 기본 매핑을 근사화하는 것입니다.
시계열 데이터는 지도 학습으로 표현될 수 있습니다.
시계열 데이터 세트에 대한 일련의 숫자가 주어지면 지도 학습 문제처럼 보이도록 데이터를 재구성할 수 있습니다. 이전 시간 단계를 입력 변수로 사용하고 다음 시간 단계를 출력 변수로 사용하여 이를 수행할 수 있습니다.
예를 들어 다음과 같이 시계열 자료가 있다면
1, 2, 3, 4, 5, ...
moving 윈도우 방식으로 다음 처럼 입력데이터 x와 출력데이터 y로 연결한다. 3단계 무빙 윈도우이다.
X, y
[1, 2, 3] 4
[2, 3, 4] 5
...
입출력 데이터 생성 코딩
import pandas as pd
data = pd.read_csv("daily-total-female-births.csv")
data.head()
"Date","Births"
"1959-01-01",35
"1959-01-02",32
"1959-01-03",30
"1959-01-04",31
"1959-01-05",44
X_ans=[]
Y_ans=[]
for i in range (len(data["Births"])-2):
X=list(data["Date"])[i:i+3]
Y=list(data["Births"])[i+1]
X_ans.append(X)
Y_ans.append(Y)
in_=pd.DataFrame([ str(x) for x in X_ans ],columns=['input'])
out=pd.DataFrame([ str(x) for x in Y_ans ],columns=['output'])
ans_1=pd.concat([in_,out],axis=1)
1. 단변량 시계열 예측을 위한 MLP 모델 방식
간단한 일변량 문제를 정수 시퀀스로 정의하고 이 시퀀스에 모델을 맞추고 모델이 시퀀스의 다음 값을 예측하도록 할 수 있습니다. 입력은 [10, 20, 30]이고 출력은 [40]과 같이 3개의 입력과 1개의 출력이 있는 문제를 구성합니다.
먼저 모델을 정의할 수 있습니다. 첫 번째 숨겨진 레이어의 input_dim 인수를 통해 입력 시간 단계의 수를 3으로 정의합니다. 이 경우 확률적 경사하강법의 효율적인 Adam 버전을 사용하고 평균 제곱 오차('mse') 손실 함수를 최적화합니다.
모델이 정의되면 훈련 데이터에 적합할 수 있으며 적합 모델을 사용하여 예측할 수 있습니다.
전체 코딩 예가 아래에 나열되어 있습니다.
1) 시계열 딥러닝 패키지 불러오기
from numpy import array
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
2) 입력데이터와 출력데이터 정의
X = array([[10, 20, 30], [20, 30, 40], [30, 40, 50], [40, 50, 60]])
y = array([40, 50, 60, 70])
3) 시계열 다층레이어 신경망 모델정의
model = Sequential()
model.add(Dense(100, activation='relu', input_dim=3))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')
4) 모델학습
model.fit(X, y, epochs=2000, verbose=0)
5) 모델 예측
x_input = array([50, 60, 70])
x_input = x_input.reshape((1, 3))
yhat = model.predict(x_input, verbose=0)
print(yhat)
'머신러닝 & 딥러닝' 카테고리의 다른 글
Tensorflow Keras - CNN ImageDataGenerator 활용하기 (0) | 2022.08.12 |
---|---|
cnn 모델을 이용한 꽃 종류를 예측하기 (0) | 2022.08.12 |
딥러닝 이미지 입력 데이터 증식하는 방법 (0) | 2022.08.07 |
CNN 모델의 사용자 이미지 데이터 생성하기 (0) | 2022.08.06 |
[실습-03] Python에서 TensorFlow를 사용한 토지 피복 분류 (0) | 2022.08.03 |