카테고리 없음
[Machine Learning] Time-series analysis를 위한 dataset 생성
carayoon
2021. 1. 28. 21:09
728x90
- dataset 생성 : tensorflow의 tf.data.Dataset API 활용하여 모델에 입력되기 전의 형식화된 데이터 세트로 만든다.
1) 사용자 임의의 입력 데이터에서 소스 데이터 집합을 만듦. 2) 데이터를 전처리 하기 위해서 데이터 세트 변환. 3) 데이터 세트에 속한 데이터들을 반복하여 사용자가 원하는 형태로 만듦.
#0부터 9까지의 dataset생성
dataset = tf.data.Dataset.range(10)
#하나의 텐서가 담는 데이터가 5개의 원소를 가지도록, 맨앞의 데이터에서부터
#5의 크기인 윈도우로 순차적으로 이동하면서 생성
#drop_remainder=True일 경우, 하나의 텐서가 딱 5개의 원소를 포함하도록 설정 (5보다 미만인 경우 생성하지 않음)
dataset = dataset.window(5, shift=1, drop_remainder=True)
#데이터세트에 있는 모든 텐서에 사용자 함수를 일괄적으로 적용
dataset = dataset.flat_map(lambda window: window.batch(5))
dataset = dataset.map(lambda window: (window[:-1], window[-1:]))
#학습을 위해서 데이터 세트를 섞는다. 데이터의 순서로 생기는 편향성을 모델이 학습하는 것을 방지하기 위해
dataset = dataset.shuffle(buffer_size=10)
for x,y in dataset:
print(x.numpy(), y.numpy())
#print된 값
[4 5 6 7] [8]
[3 4 5 6] [7]
[0 1 2 3] [4]
[5 6 7 8] [9]
[1 2 3 4] [5]
[2 3 4 5] [6]
#위의 데이터셋에, 한 번 학습시 배치 사이즈를 2개로 만들 경우 아래의 코드 사용
dataset = dataset.batch(2).prefetch(1)
- 시계열 데이터에서 학습 데이터 x와 y값을 설정하는 방법 : 보통 특정 시점 t의 값(y값)을 예측할 때, t시점의 데이터값(들)이 x에 해당하며, 어느 기간까지를 input데이터로 넣느냐에 따라서 t-1~t-w(윈도우의 크기), 윈도우의 크기 w가 정해지게 된다.
사용자가 설정한 모델에 데이터를 넣고, 값을 예측하는 코드는 다음과 같다.
forecast = []
#모델에 데이터를 적절하게 넣을 수 있도록 numpy array의 차원을 늘려준다.
#ex (1,5) -> (2,5)으로 바꿔준다.
for time in range(len(series) - window_size):
forecast.append(model.predict(series[time:time + window_size][np.newaxis]))
forecast = forecast[split_time-window_size:]
results = np.array(forecast)[:, 0, 0]