您当前的位置: 首页 >  网络

wendy_ya

暂无认证

  • 1浏览

    0关注

    342博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

循环神经网络案例(1)——利用Keras搭建循环神经网络进行股票价格预测

wendy_ya 发布时间:2021-08-05 16:16:51 ,浏览量:1

目录
    • 一、数据集介绍
    • 二、程序介绍
      • 2.1 加载数据集
      • 2.2 数据集预处理及特征提取
      • 2.3 划分训练集、测试集的数据和标签
      • 2.4 建立模型及训练
      • 2.5 输出结果可视化

一、数据集介绍

数据集采用所有当前标准普尔500指数公司的历史股票数据。 在这里,提供了一个数据集,其中包括目前在S&P500指数上发现的所有公司的历史股价(过去5年)。

数据以两种格式呈现,以满足不同个人的需求或计算限制。 已经包括了包含5年股票数据的文件(在allstocks5yr.csv和相应的文件夹中)。 文件夹individualstocks5yr包含单个股票的数据文件,以其股票代码名称标记。 allstocks5yr.csv包含相同的数据,以合并的.csv文件显示。 根据预期用途(绘图、建模等),用户可能更喜欢这些给定格式中的一种。

数据集链接如下:https://www.kaggle.com/camnugent/sandp500

当然,如果你下载出现问题,我这里也上传了我下载好的数据集,有需要的可以自取:https://download.csdn.net/download/didi_ya/20618247

所有文件都有以下的列:

  • Date——格式:yy-mm-dd
  • Open——开盘时的股票价格(这是纽约证券交易所的数据,所以都是美元)
  • High——当天达到的最高价格
  • Low Close——当天达到的最低价格
  • Volume——股票交易数量
  • Name——股票代码名称 该数据集可用于股票分析与预测。
二、程序介绍

首先,导入相应的库:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential,load_model
from keras.layers import LSTM,Dense,Dropout
import os
2.1 加载数据集

加载数据集并读取前5行数据:

df=pd.read_csv('AAPL_data.csv')
df.head()   # 读取前5行数据

在这里插入图片描述

2.2 数据集预处理及特征提取
df=df['open'].values  # 获取开盘价open的值
df=df.reshape(-1,1)   # 转换为1列
print(df.shape)
df[:5]  # 输出df的前5个值

划分训练集和测试集:

dataset_train=np.array(df[:int(df.shape[0]*0.8)])  # 80%作为训练集
dataset_test=np.array(df[int(df.shape[0]*0.8)-50:])  #后20%+50作为测试集
print(dataset_train.shape)
print(dataset_test.shape)

(1007, 1) (302, 1)

训练集和测试集数据归一化为(0,1):

scaler=MinMaxScaler(feature_range=(0,1))  # 将数据归一化为(0,1)
dataset_train=scaler.fit_transform(dataset_train)  # 拟合数据并将其进行转换
dataset_train[:5]  # 输出前5个值
dataset_test=scaler.transform(dataset_test)  # 缩放dataset
dataset_test[:5]  # 输出前5个值
2.3 划分训练集、测试集的数据和标签

创建一个划分数据及标签的函数,这里定义为create_dataset:

# 划分训练集(测试集)数据x及标签y
# 前50个数据作为数据x,后一个数据作为标签y
def create_dataset(df):
    x=[]
    y=[]
    for i in range(50,df.shape[0]):  # 产生50到df.shape[0]的整数序列
        x.append(df[i-50:i,0])
        y.append(df[i,0])
    x=np.array(x)
    y=np.array(y)
    return x,y

划分训练集数据和标签:

x_train,y_train=create_dataset(dataset_train)  # 划分训练集数据和标签
print(x_train.shape)
x_train[:1]  #显示训练集第一个数据样本

(957, 50)

划分测试集数据和标签:

x_test,y_test=create_dataset(dataset_test)  #划分测试集数据和标签
print(x_test.shape)
x_test[:1]

(252, 50)

最后,将其转换为LSTM可训练的数据样式:

# Reshape features for LSTM Layer
x_train=np.reshape(x_train,(x_train.shape[0],x_train.shape[1],1))  # 训练集数据
x_test=np.reshape(x_test,(x_test.shape[0],x_test.shape[1],1))  # 测试集数据
print(x_train.shape)
print(x_test.shape)

(957, 50, 1) (252, 50, 1)

2.4 建立模型及训练

利用Keras搭建神经网络训练模型:

model=Sequential()
model.add(LSTM(units=96,return_sequences=True,input_shape=(x_train.shape[1],1)))
model.add(Dropout(0.2))
model.add(LSTM(units=96,return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(units=96,return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(units=96))
model.add(Dropout(0.2))
model.add(Dense(units=1))

编译训练:

model.compile(loss='mean_squared_error',optimizer='adam')
if(not os.path.exists('stock_prediction.h5')):
    model.fit(x_train,y_train,epochs=50,batch_size=32)  # 训练
    model.save('stock_prediction.h5')
2.5 输出结果可视化

训练完成后,预测输出并绘制真实和预测图像:

predictions=model.predict(x_test)  #预测输出
predictions=scaler.inverse_transform(predictions)  # 反归一化
fig,ax=plt.subplots(figsize=(8,4))
plt.plot(df,color='red',label='True Price')  # 绘制真实价格
ax.plot(range(len(y_train)+50,len(y_train)+50+len(predictions)),predictions,color='blue',label='Predicted Testing Price')  # 绘制预测价格
plt.legend()

预测图像: 在这里插入图片描述 测试集可视化:

y_test_scaled=scaler.inverse_transform(y_test.reshape(-1,1))
fig,ax=plt.subplots(figsize=(8,4))
ax.plot(y_test_scaled,color='red',label='True Testing Price')
plt.plot(predictions,color='blue',label='Predicted Testing Price')
plt.legend()

预测图像: 在这里插入图片描述

ok,以上便是循环神经网络进行股票价格预测,如果对你有所帮助,记得点个赞哟,完整代码也可以参考:https://download.csdn.net/download/didi_ya/20721581

关注
打赏
1659256378
查看更多评论
立即登录/注册

微信扫码登录

0.0451s