R
[R] 주가예측 : LSTM with GPT
데사전지
2023. 3. 16. 17:19
반응형
LSTM(Long Short-Term Memory)은 시계열 데이터와 같은 순차 데이터에 대한 예측에 많이 사용되는 딥러닝 모델 중 하나입니다. LSTM은 RNN(Recurrent Neural Network)의 한 종류로, 시간적으로 연속된 데이터에서 이전 상태의 정보를 기억하고 현재 상태에서 그 정보를 이용하여 다음 상태를 예측합니다.
다음은 R과 Keras 라이브러리를 사용하여 LSTM을 이용한 주가 예측 모델을 구현한 예제 코드입니다.
library(keras)
library(tensorflow)
# 데이터 불러오기
data <- read.csv('stock_data.csv')
# 종가 데이터만 사용
close_data <- data$Close
# 데이터 스케일링
scaler <- keras::fit_transformer(close_data, scaler = "minmax")
close_data <- scaler$fit(close_data)
# 데이터셋 생성
create_dataset <- function(dataset, time_step=1) {
X <- matrix(nrow = length(dataset)-time_step-1, ncol = time_step)
y <- vector(mode = "numeric", length = length(X))
for (i in 1:(length(dataset)-time_step-1)) {
a <- dataset[i:(i+time_step-1)]
X[i,] <- a
y[i] <- dataset[i+time_step]
}
return (list(X, y))
}
time_step <- 60
dataset <- create_dataset(close_data, time_step)
X <- dataset[[1]]
y <- dataset[[2]]
# 데이터 분할
train_size <- as.integer(length(X) * 0.7)
X_train <- X[1:train_size,]
X_test <- X[(train_size+1):length(X),]
y_train <- y[1:train_size]
y_test <- y[(train_size+1):length(y)]
# 모델 구성
model <- keras_model_sequential()
model %>%
layer_lstm(units = 50, return_sequences = TRUE, input_shape = c(time_step, 1)) %>%
layer_lstm(units = 50) %>%
layer_dense(units = 1)
# 모델 컴파일
model %>% compile(loss = "mean_squared_error", optimizer = "adam")
# 모델 학습
model %>% fit(X_train, y_train, validation_data = list(X_test, y_test), epochs = 100, batch_size = 64, verbose = 1)
# 모델 예측
train_predict <- model %>% predict(X_train)
test_predict <- model %>% predict(X_test)
# 스케일링 해제
train_predict <- scaler$inverse_transform(train_predict)
y_train <- scaler$inverse_transform(y_train)
test_predict <- scaler$inverse_transform(test_predict)
y_test <- scaler$inverse_transform(y_test)
# 평가
train_rmse <- sqrt(mean((y_train - train_predict)^2))
test_rmse <- sqrt(mean((y_test - test_predict)^2))
print(paste("Train RMSE:", train_rmse))
print(paste("Test RMSE:", test_rmse))
# 시각화
plot(y_train, type = "l")
lines(train_predict, col = "red")
lines(y_test, col = "blue")
lines(test_predict, col = "green")
반응형