[LSTM] 4. 학습 및 테스트 세트 생성
본문 바로가기
비트코인 자동매매 프로그램/[전략개발] 인공지능

[LSTM] 4. 학습 및 테스트 세트 생성

by 코딩 Play 2024. 6. 13.
  • 내용:
    • 데이터를 학습과 테스트 세트로 나누기
    • LSTM을 위한 데이터셋 생성 함수
    • LSTM을 위한 데이터 재구성

이전 강의에서는 환경 설정, 필수 라이브러리 설치, 주가 데이터 로드 및 전처리, 시각화를 통해 데이터의 특성을 이해했습니다. 이제 이 데이터를 학습 및 테스트 세트로 나누고 LSTM 모델을 위해 준비할 차례입니다. 이 단계는 모델이 과거 데이터를 학습하고 보지 못한 데이터로 예측 성능을 평가할 수 있도록 하는 데 중요합니다.

데이터를 학습 및 테스트 세트로 나누기

먼저 정규화된 데이터를 학습 세트와 테스트 세트 두 부분으로 나눠야 합니다. 학습 세트는 모델 학습에 사용되고, 테스트 세트는 모델 성능 평가에 사용됩니다.

# 학습 및 테스트 세트 생성
train_size = int(len(scaled_data) * 0.8)
train_data = scaled_data[:train_size]
test_data = scaled_data[train_size:]

설명:

  • 학습 세트 크기 결정: 학습 세트 크기를 전체 데이터 길이의 80%로 계산합니다. 이는 모델이 학습할 충분한 데이터를 확보하면서도 테스트를 위한 상당 부분을 남기는 일반적인 방법입니다.
  • 데이터 분할: scaled_datatrain_datatest_data로 나눕니다. 첫 80%의 데이터는 학습용으로 사용되고, 나머지 20%는 테스트용으로 사용됩니다.

LSTM을 위한 데이터셋 생성 함수

LSTM 모델은 입력 데이터를 시퀀스 형태로 필요로 합니다. 따라서 주가의 시퀀스를 입력 특징으로, 다음 가격을 출력 타깃으로 하는 시퀀스를 만들어야 합니다. 이 단계는 중첩되는 데이터 윈도우를 생성하는 과정입니다.

import numpy as np

# LSTM을 위한 데이터셋 생성
def create_dataset(data, time_step=1):
    X, y = [], []
    for i in range(len(data) - time_step - 1):
        a = data[i:(i + time_step), 0]
        X.append(a)
        y.append(data[i + time_step, 0])
    return np.array(X), np.array(y)

time_step = 60
X_train, y_train = create_dataset(train_data, time_step)
X_test, y_test = create_dataset(test_data, time_step)

설명:

  • NumPy 임포트: 파이썬에서 수치 계산을 위한 기본 패키지인 NumPy를 임포트합니다.
  • 데이터셋 생성 함수: create_dataset 함수는 LSTM 모델을 위한 입력-출력 쌍을 생성합니다.
    • 입력 특징 (X): 각 time_step 길이의 시퀀스에 대해 다음 값을 출력 타깃(y)으로 합니다.
    • 출력 타깃 (y): 각 시퀀스를 따르는 값입니다.
  • 타임 스텝 설정: time_step을 60으로 설정하여 각 입력 시퀀스가 60개의 타임 스텝을 갖도록 합니다.
  • 학습 및 테스트 세트 생성: create_dataset 함수를 학습 데이터와 테스트 데이터에 적용하여 X_train, y_train, X_test, y_test를 생성합니다.

LSTM을 위한 데이터 재구성

LSTM 모델은 입력 데이터가 특정 형태로 되어 있어야 합니다: [샘플, 타임 스텝, 특징]. 따라서 입력 데이터를 이와 같은 형태로 재구성해야 합니다.

# 입력 데이터를 [샘플, 타임 스텝, 특징] 형태로 재구성
X_train = X_train.reshape(X_train.shape[0], X_train.shape[1], 1)
X_test = X_test.reshape(X_test.shape[0], X_test.shape[1], 1)

설명:

  • 학습 데이터 재구성: X_train을 세 개의 차원으로 재구성합니다: 샘플 수, 타임 스텝 수(60), 특징 수(1). 이는 reshape(X_train.shape[0], X_train.shape[1], 1)을 사용하여 수행합니다.
  • 테스트 데이터 재구성: 유사하게 X_testX_train과 같은 세 개의 차원으로 재구성합니다.

전체 코드

다음은 학습 및 테스트 세트를 생성하고 데이터를 LSTM 모델을 위해 준비하는 전체 코드입니다:

import numpy as np

# 학습 및 테스트 세트 생성
train_size = int(len(scaled_data) * 0.8)
train_data = scaled_data[:train_size]
test_data = scaled_data[train_size:]

# LSTM을 위한 데이터셋 생성
def create_dataset(data, time_step=1):
    X, y = [], []
    for i in range(len(data) - time_step - 1):
        a = data[i:(i + time_step), 0]
        X.append(a)
        y.append(data[i + time_step, 0])
    return np.array(X), np.array(y)

time_step = 60
X_train, y_train = create_dataset(train_data, time_step)
X_test, y_test = create_dataset(test_data, time_step)

# 입력 데이터를 [샘플, 타임 스텝, 특징] 형태로 재구성
X_train = X_train.reshape(X_train.shape[0], X_train.shape[1], 1)
X_test = X_test.reshape(X_test.shape[0], X_test.shape[1], 1)

 

이제 학습 및 테스트 세트로 데이터를 나누고 적절히 재구성했으므로, LSTM 모델을 구축하고 학습시키는 단계로 넘어갈 준비가 되었습니다. 다음 강의에서는 LSTM 모델의 아키텍처를 정의하고, 이를 컴파일하며, 준비된 학습 데이터를 사용하여 모델을 학습시킬 것입니다. 이는 모델 성능을 평가하고 예측을 수행하기 위한 기초를 마련합니다.

최근댓글

최근글

skin by © 2024 ttuttak