#匯入標準庫
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
training_set=pd.read_csv("stock_lstm.csv")
training_set=training_set.iloc[:,1:2].values
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import TimeSeriesSplit
from sklearn.metrics import mean_squared_error, r2_score
import matplotlib.dates as mdates
from sklearn import linear_model
from config import batch_size
dataset = pd.read_csv("stock_lstm.csv",na_values=['null'],index_col='Date',parse_dates=True,infer_datetime_format=True)
#畫出近年股票走勢
dataset['Adj Close'].plot()
X=dataset.drop(['Adj Close','Close'],axis=1)
test = dataset
# Target column,設定特征集和因變數向量
target_adj_close = pd.DataFrame(dataset['Adj Close'])
feature_columns = ['Open', 'High', 'Low', 'Volume']
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
feature_minmax_transform_data = scaler.fit_transform(test[feature_columns])
feature_minmax_transform = pd.DataFrame(columns=feature_columns, data=https://bbs.csdn.net/topics/feature_minmax_transform_data, index=test.index)
feature_minmax_transform.head()
#分離訓練集與測驗集
ts_split= TimeSeriesSplit(n_splits=10)
for train_index, test_index in ts_split.split(feature_minmax_transform):
X_train, X_test = feature_minmax_transform[:len(train_index)], feature_minmax_transform[len(train_index): (len(train_index)+len(test_index))]
y_train, y_test = target_adj_close[:len(train_index)].values.ravel(), target_adj_close[len(train_index): (len(train_index)+len(test_index))].values.ravel()
X_train =np.array(X_train)
X_test =np.array(X_test)
X_train_3 = X_train.reshape(X_train.shape[0], 1, X_train.shape[1])
X_test_3 = X_test.reshape(X_test.shape[0], 1, X_test.shape[1])
from keras.models import Sequential
from keras.layers import Dense
import keras.backend as K
from keras.callbacks import EarlyStopping
from keras.optimizers import Adam
from keras.models import load_model
from keras.layers import LSTM
K.clear_session()
model_lstm = Sequential()
model_lstm.add(LSTM(16, input_shape=(1, X_train.shape[1]), activation='relu', return_sequences=False))
model_lstm.add(Dense(1))
model_lstm.compile(loss='mean_squared_error', optimizer='adam')
early_stop = EarlyStopping(monitor='loss', patience=5, verbose=1)
history_model_lstm = model_lstm.fit(X_train_3, y_train, epochs=200, batch_size=8, verbose=1, shuffle=False, callbacks=[early_stop])
#batch
#評估模型
y_pred_test_lstm = model_lstm.predict(X_test_3)
y_train_pred_lstm = model_lstm.predict(X_train_3)
print("The R2 score on the Train set is:\t{:0.3f}".format(r2_score(y_train, y_train_pred_lstm)))
r2_train = r2_score(y_train, y_train_pred_lstm)
#畫出模型預測圖
plt.plot(y_test, label='True',color = 'grey')
plt.plot(y_pred_test_lstm , label='LSTM_pred',color = 'orange')
plt.title("LSTM's_Prediction")
plt.xlabel('features')
plt.ylabel('adj_Close')
plt.legend()
plt.show()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/277863.html
標籤:其他技術專區
