LSTM股票价格预测

人工智能52

ID:399899
注: 这里使用的数据源是Tushare

LSTM股票价格预测实验

实验介绍

使用LSTM进行股票价格的预测,用到的框架主要包括:TensorFlow2.0,主要用于深度学习算法的构建,本实验以Tushare平台的601398股票历史数据为基础,基于Keras深度学习库股票价格进行预测。

算法原理:

这里就不对模型原理进行介绍了 这里引用一下别人的 需要的朋友去看一下https://juejin.cn/post/6973082167970627620

搭建思路:

使用LSTM模型对股票数据的'open', 'high', 'low', 'close', 'pre_close', 'change', 'pct_chg', 'vol', 'amount'九个特征进行训练预测收盘价。

准备工作

环境准备:python3.7;Tensorflow;Keras

数据准备:https://www.tushare.pro/ ;原始数据取得是由tushare平台提供的股票日线行情历史数据。

实验步骤

导入实验环境

导入相应的模块

import pandas as pd
import tensorflow as tf
import numpy as np
import tushare as ts
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['KaiTi']

plt.rcParams['axes.unicode_minus'] = False

导入实验数据集

步骤 1 获取数据


ts.set_token('这里填写自己的token码在个人主页可以获取')
pro = ts.pro_api()
data = pr.daily(ts_code='601398.SH')

data = data.iloc[::-1,]

data1 = data.copy(deep=True)

tushare主页:https://tushare.pro/document/2

步骤 2 检测是否有缺失值

data.isna().any()

输出结果:

ts_code False

trade_date False

open False

high False

low False

close False

pre_close False

change False

pct_chg False

vol False

amount False

步骤 3 异常值检测

data1 = data

mean1 = data1['vol'].quantile(q=0.25)

mean2 = data1['vol'].quantile(q=0.75)

mean3 = mean2-mean1

topnum21 = mean2+1.5*mean3

bottomnum21 = mean2-1.5*mean3

print("正常值的范围:",topnum21,bottomnum21)

print("是否存在超出正常范围的值:",any(data1['vol']>topnum21))

print("是否存在小于正常范围的值:",any(data1['vol']<bottomnum21))

输出结果:

正常值的范围: 4625919.582500001 -113825.70250000013

是否存在超出正常范围的值: True

是否存在小于正常范围的值: False

检测存在超出正常范围的值,对该部分值进行替换

replace_value=data1['vol'][data1['vol']<topnum21].max()

data1.loc[data1['vol']>topnum21,'vol']=replace_value
mean1 = data1['amount'].quantile(q=0.25)

mean2 = data1['amount'].quantile(q=0.75)

mean3 = mean2-mean1

topnum21 = mean2+1.5*mean3

bottomnum21 = mean2-1.5*mean3

print("正常值的范围:",topnum21,bottomnum21)

print("是否存在超出正常范围的值:",any(data1['amount']>topnum21))

print("是否存在小于正常范围的值:",any(data1['amount']<bottomnum21))

输出结果:

正常值的范围: 2558165.1642500004 -167064.92425000016

是否存在超出正常范围的值: True

是否存在小于正常范围的值: False

检测存在超出正常范围的值,对该部分值进行替换

replace_value=data1['amount'][data1['amount']<topnum21].max()

data1.loc[data1['amount']>topnum21,'amount']=replace_value

步骤 4 归一化处理

这里采用的最大最小归一化 归一化可以使模型得到更好的鲁棒性

data = data.iloc[:,2:]

data_max = data.max()

data_min = data.min()

data = (data-data_min)/(data_max-data_min)

步骤 5 数据划分并查看数据集信息

dataset_st = np.array(data)

def data_set(dataset, lookback):

    dataX, dataY = [], []

    for i in range(len(dataset)-lookback):

        a = dataset[i:(i+lookback)]

        dataX.append(a)

        dataY.append(dataset[i+lookback][3])

    return np.array(dataX), np.array(dataY)

train_size = int(len(dataset_st)*0.7)

test_size = len(dataset_st)-train_size

train, test = dataset_st[0:train_size], dataset_st[train_size:len(dataset_st)]

print(len(train))

print(len(test))

lookback = 60

trainX, trainY = data_set(train, lookback)

testX, testY = data_set(test, lookback)

print('trianX:,trianY', trainX.shape, trainY.shape)

输出结果:

trianX:,trianY (2560, 60, 7) (2560,)

LSTM回归预测 建模

步骤 1 初始化神经网络

数据集准备完成,接下来我们就需要构建训练模型,我们首先需要建立初始化的神经网络。

model=tf.keras.Sequential([tf.keras.layers.LSTM(120,input_shape=(trainX.shape[1],

trainX.shape[2]),return_sequences=True),

    tf.keras.layers.Dropout(0.2),

    tf.keras.layers.LSTM(60),

    tf.keras.layers.Dropout(0.2),

    tf.keras.layers.Dense(30,activation='relu'),

    tf.keras.layers.Dense(1)

    ])

步骤 2 定义学习率更新规则

设置模型的学习率参数。

给出学习率(步长)进行更新

model.compile(

    optimizer=tf.keras.optimizers.Adam(0.001),

    loss='mean_squared_error',

    metrics=["mse"]

)

步骤 3 构建模型训练

神经网络的模型参数更新是一个迭代的过程,所以我们可以将模型训练的过程定义成一个函数,从而进行模型的训练。

history = model.fit(trainX, trainY,

                    batch_size=64, epochs=25, validation_data=(testX, testY),

                    validation_freq=1)

步骤 4 构建绘图函数

绘制train loss与epoch的关系图,这样我们就可以查看模型训练的每一步损失值。

def plot_learning_curves(history):

    pd.DataFrame(history.history).plot(figsize=(10,6))

    plt.grid(True)

    plt.title('训练情况')

    plt.savefig('./训练情况.jpg')

plt.show()

3实验结果及分析 ****

3 .1 实验结果 ****

评价指标:

MSE: tf.Tensor(25.45738, shape=(), dtype=float32)

MAE: tf.Tensor(5.0175276, shape=(), dtype=float32)

MAPE: tf.Tensor(93.39253, shape=(), dtype=float32)
LSTM股票价格预测
LSTM股票价格预测

; 实验 分析

从评价指标可以看出整体误差较小,可以预测效果图上来看,预测情况与实际情况的走势基本一致,但是价格有所偏差,这是值得提升的地方。

整体来说,LSTM模型股票价格预测有一定效果,对证券投资市场具有一定的指导作用。

Original: https://blog.csdn.net/As_Yan_Do/article/details/124649032
Author: 千世先森
Title: LSTM股票价格预测



相关阅读

Title: Anaconda安装tensorflow和keras包

Title: Anaconda安装tensorflow和keras包

1.背景

在Anaconda中无法直接安装这两个包,安装过程异常漫长。

2.准备工作

添加清华源

1.在Anaconda prompt中(可利用全局搜索查找)运行 conda config命令,然后寻找到用户目录下的.condarc文件(如果没找到的话可能是隐藏了,可右键设置显示隐藏文件)
2.将该文件内容更改为
channels:

  • http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/peterjc123/
  • http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
  • http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/menpo/
  • http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
  • http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
  • http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
  • http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
  • http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
    show_channel_urls: true
    ssl_verify: true

若按上述步骤更改文件后显示invaliderror,则先删除.condarc文件,然后运行conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
最后在新创的.condarc文件中重复上述2操作修改文件内容

3.在Anaconda prompt中运行
conda clean -i
//清除索引缓存,保证用的是镜像站提供的索引

3.建立虚拟环境

1.创建环境

打开Anaconda prompt中输入
conda create --name tensorflow python=3.6
//"tensorflow"是你建立的conda虚拟环境的名字
//创建时若出现旋转横线停止旋转的情况可能是因为上述命令行中输入错误
//不论你之前安装的python版本是什么,在这里建议用3.6,兼容性更强,并且因为需要python,tensorflow和keras版本匹配才能顺利安装使用后面所安装的tensorflow和keras均为与python3.6适配的版本,若不使用python3.6创建虚拟环境,请务必百度与自己安装python版本适配的tensorflow和keras,在此特别强调tensorflow和keras必须版本适配否则不能顺利安装使用

2.进入环境

conda activate tensorflow
//进入名为"tensorflow"的虚拟环境

3.安装包

安装tensorflow

pip install tensorflow==2.0.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
//上面两行是一个命令行
//安装过程中底行会出现Proceed:y/n:只需要输入一个y即可

测试tensorflow是否安装成功

1.首先创建一个新的工程包
2.配置环境
LSTM股票价格预测
LSTM股票价格预测
LSTM股票价格预测
LSTM股票价格预测

//参考路径,具体以自己的安装路径为准
3.在project下创建一个test.py,内容如下
import tensorflow as tf
A = tf.constant([[1, 2], [3, 4]])
B = tf.constant([[5, 6], [7, 8]])
C = tf.matmul(A, B)
print©
print(tf. version) //注意这里version两侧分别是两条下划 线
4.若运行结果如下则安装成功
LSTM股票价格预测

; 安装keras

pip install keras==2.3.1 -i https://pypi.tuna.tsinghua.edu.cn/simple
//上面两行是一个命令行

测试keras是否安装成功

1.进入python环境
python
2.导入keras包
import keras
3.若结果为如下图则安装成功
LSTM股票价格预测

; 4.可能遇到的问题

1.官网安装Anaconda速度很慢

建议到清华镜像:https://mirrors.tuna.tsinghua.edu.cn/安装
//镜像列表->anaconda->archive->(摁一下date旁边的箭头可将版本从新到旧排列然后安装最上面即最新版本即可)

2.非首次安装Anaconda后发现大量文件缺失

删除用户目录下的.condarc文件,卸载旧文件包重新下载

3.测试tensorflow包时出现如下错误

LSTM股票价格预测
点击错误报告中的蓝色链接,进入对应的文件,找到对应的行,改成图。

[En]

Click the blue link in the error report to enter the corresponding file, find the corresponding line, and change it to the figure.

; 4.安装包时出现如下错误

LSTM股票价格预测
该错误是因为安装的tensorflow与keras版本不匹配导致,请卸载原tensorflow包和keras包,百度与自己虚拟环境python版本适配的tensorflow包和keras包,注意tensorflow必须要与keras版本适配

5.导入问题

在python环境中导入tensorflow若出现报错"importerror cannot found name "或者等了一会都完成不了可以重新进入python环境试试import tensorflow as tf

Original: https://blog.csdn.net/qq_48078689/article/details/124273084
Author: gcj_future
Title: Anaconda安装tensorflow和keras包

Original: https://blog.csdn.net/qq_48078689/article/details/124273084
Author: gcj_future
Title: Anaconda安装tensorflow和keras包

相关文章
PHP语音通知接口开发 人工智能

PHP语音通知接口开发

语音通知接口应用场景 语音通知的强提醒模式,能在第一时间通知到用户,满足多种场景下的应用需求 订单通知 报警通知 更多案列请查看短信通知+语音播报自动双呼解决方案 无线语音通知API优势 PHP对接语...
@AliasFor注解 人工智能

@AliasFor注解

顾名思义,@AliasFor表示别名,它可以添加到自定义注解的两个属性上,表示这两个属性互为别名。也就是说,这两个属性其实是同一个含义。 通常所有注解都会有一个属性value,在使用注解时,如果给va...
VoLTE语音编码标准,NV控制 人工智能

VoLTE语音编码标准,NV控制

VoLTE语音编码标准 VoLTE使用两种语音编码标准:AMR(或AMR-NB)、AMR-WB。每种编码标准又都包含多种码率,中移的测试用例中包含不同编码方式及不同码率之 间的对比测试,终端侧可在QX...