일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Python
- 파이썬 가상환경
- 와스 웹서버의 차이
- 빗썸 API 사용
- WAS WebServer 차이
- 트레이딩 봇 만들기
- 리눅스
- beautifulsoup
- 단순 반복 자동화
- WAS란
- 즐겨찾기가 가장 많은 식당 정보 출력하기
- 프로그래머스 소수
- spring
- 리눅스 rwx
- pybithumb
- JSON특징
- 변동성 돌파전략
- JavaScript Obejct Notation
- 프로그래머스 SQL
- Web Service Architecture
- java
- 리눅스 777
- Web Server란
- JSON 형식
- BigDecimal
- string format
- 파이썬 주식
- 프로그래머스
- 파이썬
- 오라클
- Today
- Total
IT 개발자_S
머신러닝을 이용한 주식 예측 -기본편 (삼성전자 주식 예측) 본문
● 머신러닝 LSTM 모델을 사용할 수 있다.
● LSTM 을 활용하여 주식 예측의 흐름을 읽을 수 있다.
LSTM 머신러닝 모델을 사용하여 삼성전자 주가의 흐름을 예측해보는 실습을 진행하겠습니다.
먼저 RNN 순환신경망은 과거에 입력된 데이터를 나중에 입력된 데이터의 관계를 고려하는 방법으로
LSTM(Long Short Term Memory) 반복되면서 과거의 단계를 다음단계로 넘길지 안넘길지를 파악하여 손실을 줄여주는 방법을 사용하여 예측을 진행해 보겠습니다.
먼저 데이터 준비하기 야후 파이낸스 접속후 SAMSUNG 서치 후 Download
실습환경 코랩
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers import LSTM, Dropout, Dense, Activation
# from keras.callbacks import TensorBoard, ModelCheckpoint, ReduceLROnPlateau
import datetime
data_low = pd.read_csv('/content/drive/MyDrive/colab/머신러닝/data/005930.KS.csv')
data = data_low
data= data.dropna()
data.isnull().sum()
keara, matplotlib 라이브러리 import 후 다운받은 csv 파일을 불러온다.
해당 파일을 read 할때 dorpna 를 사용하여 null 값을 제거하여 null 처리를 진행해준다.
high_prices = data['High'].values
low_prices = data['Low'].values
mid_prices = (high_prices + low_prices) / 2
고가 , 저가의 중간 값이 mid_prices 를 구해준다.
seq_len = 50
sequence_length = seq_len + 1
result = []
for index in range(len(mid_prices) - sequence_length):
result.append(mid_prices[index: index + sequence_length])
50개의 데이터를 연속적으로 읽어 다음 데이터를 파악하는 RNN구조의 데이터를 만든다.
normalized_data = []
normalized_data_price = []
for window in result:
normalized_window = [((float(p) / float(window[0])) - 1) for p in window]
normalized_data.append(normalized_window)
normalized_data_price.append(normalized_window_price)
result = np.array(normalized_data)
#result = np.array(normalized_data_price)
row = int(round(result.shape[0] * 0.9))
train = result[:row, :]
x_train = train[:, :-1]
x_train = np.reshape(x_train, (x_train.shape[0], x_train.shape[1], 1))
y_train = train[:, -1]
x_test = result[row:, :-1]
x_test = np.reshape(x_test, (x_test.shape[0], x_test.shape[1], 1))
y_test = result[row:, -1]
x_train.shape, x_test.shape
normalized_window = [((float(p) / float(window[0])) - 1) for p in window] : 정규화 작업
window 50개의 저장된 데이터를 정규화하여 window[0] 을 기준으로 나눈다.
해당 데이터의 0.9 즉 90% train 데이터 나머지 10% test 데이터로 사용한다.
model = Sequential()
model.add(LSTM(50, return_sequences=True, input_shape=(50, 1)))
model.add(LSTM(64, return_sequences=False))
model.add(Dense(1, activation='linear'))
model.compile(loss='mse', optimizer='rmsprop')
model.summary()
모델 LSTM 모델을 사용하여 머신러닝 모델을 만든다. 출력은 1 이므로 Dense 1로 선언.
model.fit(x_train, y_train,
validation_data=(x_test, y_test),
batch_size=20,
epochs=10)
모델 피팅하는 작업을 진행한다.
pred = model.predict(x_test)
fig = plt.figure(facecolor='white', figsize=(20, 10))
ax = fig.add_subplot(111)
ax.plot(y_test, label='True')
ax.plot(pred, label='Prediction')
ax.legend()
plt.show()
실제 matpliot 를 통해 예측모델과 실제 모델의 추이를 살펴본다.
전체적인 흐름이 비슷하다는 것을 알수 있다.
해당 소스코드 및 강의는 github.com/kairess/stock_crypto_price_prediction 를 참조하였습니다.
kairess/stock_crypto_price_prediction
Contribute to kairess/stock_crypto_price_prediction development by creating an account on GitHub.
github.com
'IT > 머신러닝' 카테고리의 다른 글
머신러닝을 이용한 가격 예측 프로젝트 -(Facebook- prophet) (0) | 2020.12.21 |
---|