비트코인 가격 예측 모델
2024. 1. 12. 07:51ㆍAI/Machine learning
- 목차
반응형
Regression 모델로 예측
data loading
import pandas as pd
dataset = pd.read_csv('bitcoin.csv')
dataset.head()
Date Open High Low Close Adj Close Volume
0 2017-01-01 963.66 1003.08 958.70 998.33 998.33 147775008
1 2017-01-02 998.62 1031.39 996.70 1021.75 1021.75 222184992
2 2017-01-03 1021.60 1044.08 1021.60 1043.84 1043.84 185168000
3 2017-01-04 1044.40 1159.42 1044.40 1154.73 1154.73 344945984
4 2017-01-05 1156.73 1191.10 910.42 1013.38 1013.38 510199008
Data 전처리
가격의 추이를 그래프로 분석
price = dataset['Open'].to_numpy()
from matplotlib import pyplot as plt
plt.figure()
plt.plot(np.arange(len(price)), price)
plt.show()
값의 크기를 정규화
price = price.reshape(-1, 1) # 뒤에 dim 추가
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler() # z-normalization (standard ..)
scaler.fit(price)
price = scaler.transform(price).reshape(-1,)
앞의 20일 데이터와 다음날을 y 값으로 하여 데이터셋 구성
window = 20
X = []
y = []
for i in range(len(price) - window):
X.append(price[i: i + window])
y.append(price[i + window])
X = np.array(X).reshape(-1, window, 1) # 1d conv를 위해 마지막에 dim 추가
y = np.array(y)
데이터셋 분리
x_train = X[:800]
x_test = X[800:]
y_train = y[:800]
y_test = y[800:]
모델 정의
model = keras.Sequential(
[
# shape: None x 20 x 1 (feature num은 1: 가격)
# kernel_size = 3 (3일간 가격을 보겠음)
layers.Conv1D(filters=10, kernel_size=3, input_shape = (20, 1)),
# None x 18 x 10
# num params: (3*1 + 1)*10
layers.Activation(keras.activations.relu),
layers.Flatten(),
# shape: 180
layers.Dense(1) # 가격 자체를 예측 하는 거라 (분류가 아니라) 1
# shape: None x 1
# params: 180*1
]
)
학습
model.compile(
loss = "mean_squared_error", # regression 문제라 (값 예측) MSE를 사용
optimizer = keras.optimizers.Adam(lr = 0.0001)
)
hist = model.fit(x_train, y_train, epochs=200, validation_split=0.1)
반응형
'AI > Machine learning' 카테고리의 다른 글
Surprise (0) | 2022.05.15 |
---|---|
Latent factor model: matrix factorization (0) | 2022.05.15 |
데이터 마이닝 1 (0) | 2022.05.14 |
CF model with visual information (0) | 2022.03.27 |
언어모델 (0) | 2022.03.13 |