Keras深度学习LSTM模型 预测黄金主力收盘价【转载】

Keras深度学习LSTM模型 预测黄金主力收盘价

(转自:https://www.joinquant.com/view/community/detail/2e996d21c95a409ba23a651085ab9f61
深度学习框架 Keras,深度学习LSTM模型

1 数据源:黄金主力数据 来源于JQData (数据由JQData支持 )

2 数据清洗

3 使用黄金主力数据 进⾏预测的2个实验

数据集:70%用做训练集 训练模型 ;30%测试集。
(数据集见附件)

模型:Keras框架, 用LSTM模型对收盘价进行预测
循环神经⽹网络,RNN(Recurrent Neural Network)中的LSTM(Long Short-Term Memory)

实验结果:是测试集的结果。test为测试集的真实收盘价,pred为模型预测的收盘价

实验1:

使用历史前5个时刻的收盘价

预测当前时刻的收盘价
每组输入包括5个step,每个step对应⼀一收盘价,输出⼀一维,即 [None, 5, 1] => [None, 1]

实验结果:是测试集的结果。test为测试集的真实收盘价,pred为模型预测的收盘价
在这里插入图片描述
实验2:

使⽤历史前5个时刻的 open close high low volume money
预测当前时刻的收盘价,
即 [None, 5, 6] => [None, 1]

实验结果:是测试集的结果。test为测试集的真实收盘价,pred为模型预测的收盘价
在这里插入图片描述

from jqdatasdk import *
#jqdata的账号密码
auth('我的邮箱' : 'jiaohaibin@ruc.edu.cn',有问题,欢迎与我交流)
df_data_5minute= get_price('AU9999.XSGE',   start_date='2016-01-01', end_date='2018-01-01', frequency='5m')
df_data_5minute.to_csv('黄金主力5分钟数据.csv')
df_data_5minute

在这里插入图片描述

df.head()

在这里插入图片描述

#df.drop('money', axis=1, inplace=True)
data_train =df.iloc[:int(df.shape[0] * 0.7), :]
data_test = df.iloc[int(df.shape[0] * 0.7):, :]
print(data_train.shape, data_test.shape)

(37317, 6) (15993, 6)

# -*- coding: utf-8 -*-
# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.preprocessing import MinMaxScaler
import time
scaler = MinMaxScaler(feature_range=(-1, 1))
scaler.fit(data_train)

MinMaxScaler(copy=True, feature_range=(-1, 1))

data_train = scaler.transform(data_train)
data_test = scaler.transform(data_test)
data_train

array([[-0.98877193, -0.98736842, -0.98459384, -0.99297259, -0.82504604,
-0.85978547],
[-0.99298246, -0.98596491, -0.98739496, -0.99437807, -0.92389948,
-0.93904608],
[-0.99438596, -0.99438596, -0.99159664, -0.99437807, -0.95134557,
-0.96104178],
…,
[ 0.61263158, 0.61824561, 0.61484594, 0.61349262, -0.90916652,
-0.90885626],
[ 0.61684211, 0.61403509, 0.61204482, 0.61630358, -0.94754352,
-0.94737162],
[ 0.6154386 , 0.6154386 , 0.61064426, 0.61349262, -0.94445435,
-0.9442865 ]])

from keras.layers import Input, Dense, LSTM
 from keras.models import Model
 output_dim = 1
 batch_size = 256
 epochs = 10
 seq_len = 5
 hidden_size = 128
 X_train = np.array([data_train[i : i + seq_len, 0] for i in range(data_train.shape[0] - seq_len)])[:, :, np.newaxis]
 y_train = np.array([data_train[i + seq_len, 0] for i in range(data_train.shape[0]- seq_len)])
 X_test = np.array([data_test[i : i + seq_len, 0] for i in range(data_test.shape[0]- seq_len)])[:, :, np.newaxis]
 y_test = np.array([data_test[i + seq_len, 0] for i in range(data_test.shape[0] - seq_len)])
 print(X_train.shape, y_train.shape, X_test.shape, y_test.shape)
 X = Input(shape=[X_train.shape[1], X_train.shape[2],])
 h = LSTM(hidden_size, activation='relu')(X)
 Y = Dense(output_dim, activation='sigmoid')(h)
 model = Model(X, Y)
 model.compile(loss='mean_squared_error', optimizer='adam')
 model.fit(X_train, y_train, epochs=epochs, batch_size=batch_size, shuffle=False)
 y_pred = model.predict(X_test)
 print('MSE Train:', model.evaluate(X_train, y_train, batch_size=batch_size))
 print('MSE Test:', model.evaluate(X_test, y_test, batch_size=batch_size))
 plt.plot(y_test, label='test')
 plt.plot(y_pred, label='pred')
 plt.legend()
 plt.show()

(37312, 5, 1) (37312,) (15988, 5, 1) (15988,)
Epoch 1/10
37312/37312 [] - 4s 110us/step - loss: 0.1995
Epoch 2/10
37312/37312 [
] - 4s 94us/step - loss: 0.0612
Epoch 3/10
37312/37312 [] - 4s 109us/step - loss: 0.0441
Epoch 4/10
37312/37312 [
] - 4s 114us/step - loss: 0.0423
Epoch 5/10
37312/37312 [] - 4s 106us/step - loss: 0.0418
Epoch 6/10
37312/37312 [
] - 4s 96us/step - loss: 0.0415
Epoch 7/10
37312/37312 [] - 4s 99us/step - loss: 0.0412
Epoch 8/10
37312/37312 [
] - 4s 110us/step - loss: 0.0410
Epoch 9/10
37312/37312 [] - 4s 116us/step - loss: 0.0409
Epoch 10/10
37312/37312 [
] - 4s 98us/step - loss: 0.0408
37312/37312 [] - 1s 30us/step
MSE Train: 0.04086427927292725
15988/15988 [
] - 0s 28us/step
MSE Test: 6.807026879235516e-05

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值