IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> LSTM股票价格预测 -> 正文阅读

[人工智能]LSTM股票价格预测

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(data1.head(10))

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(data1.head(10))

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.gca().set_ylim(0,)

    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)
![在这里插入图片描述](https://img-blog.csdnimg.cn/a9dfb111dc9146a3b49369a5a6226a92.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/c99ce8b6792e41e6959dba58bd30d09a.png)




### **实验** **分析**

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

整体来说,LSTM模型股票价格预测有一定效果,对证券投资市场具有一定的指导作用。
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-05-10 11:54:11  更:2022-05-10 11:57:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:38:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码