딥러닝/정형데이터

시계열 데이터를 RNN으로 분석할 때 데이터의 형태(차원)

씩씩한 IT블로그 2021. 1. 12. 13:46
반응형

 

입력데이터의 형태(차원)

RNN모델에 시계열 데이터를 입력할 때 입력데이터의 형태는 3차원이 된다.

(학습할 데이터의 수, sequence, x값의 개수)

데이터의 수 : 학습할 데이터의 개수 (데이터의 수-sequnce)

sequence : 특정값을 구하기 위해 반영할 시간의 길이

x값의 개수 : 사용할 독립변수의 개수

아래의 예시에서 어떻게 이러한 모양이 나오는지 알아 본다.

이해를 돕기위해 데이터의 수는 빨간색, sequence는 초록색, x값의 개수는 파란색으로 표시한다

 

자전거 이용률 예시

season(계절), holdiay(방학여부), workingday(평일여부)에 따른 자전거 사용횟수(count)가 시계열적으로 나타나있는 데이터가 있다.

데이터의 개수는 총 13128개이다.

X의 column이 3개(season, holiday, workingday)가 있고, Y의 column은 1개(count)라고 가정한다.

 

그리고 RNN모델에 데이터를 넣기 위해 데이터의 모양을 바꾼다. 이때 sequnce는 5라고 해보자.

즉 t일에 빌려간 자전거의 수를 도출하기 위해 (t-5,t-4,t-3,t-2,t-1) 5시간의 X데이터를 이용하는 것이다. 

 

그러면 최종적인 input데이터의 모양은 (13123(=데이터의 수-sequnce), 5(=sequnce), 3(=X컬럼의 수) ) 와 같다.

이를 그림으로 표현하면 다음과 같다.

 

그리고 이를 코드로 구현하면 아래와 같다.

## X / Y Split
X_train, Y_train = [], []
for index in range(len(X_train_scaled) - sequence):
    X_train.append(np.array(X_train_scaled[index: index + sequence]))
    Y_train.append(np.ravel(Y_train_scaled[index + sequence:index + sequence + 1]))
X_train, Y_train = np.array(X_train), np.array(Y_train)
X_test, Y_test = [], []
for index in range(len(X_test_scaled) - sequence):
    X_test.append(np.array(X_test_scaled[index: index + sequence]))
    Y_test.append(np.ravel(Y_test_scaled[index + sequence:index + sequence + 1]))  
X_test, Y_test = np.array(X_test), np.array(Y_test)

## Retype and Reshape
X_train = X_train.reshape(X_train.shape[0], sequence, -1)
X_test = X_test.reshape(X_test.shape[0], sequence, -1)
print('X_train:', X_train.shape, 'Y_train:', Y_train.shape)
print('X_test:', X_test.shape, 'Y_test:', Y_test.shape)

 

반응형