【MATLAB数据处理实用案例详解(13)】——利用Elman网络实现上证股市开盘价预测

news2024/11/13 17:58:42

目录

    • 一、问题描述
    • 二、Elman网络预测上证股市开盘价原理
    • 三、算法步骤
      • 3.1 加载数据
      • 3.2 构造样本集
      • 3.3 划分训练集和测试集
      • 3.4 创建Elman神经网络
      • 3.5 网络训练
      • 3.6 测试
    • 四、结果展示

一、问题描述

选择2005年6月30日至2006年12月1日的上证开盘价进行预测分析。数据保存在elm_stock.mat文件中,共计337条开盘价格,保存为double类型的向量中,开盘价的走势如下图所示。
在这里插入图片描述

在这里插入图片描述

二、Elman网络预测上证股市开盘价原理

采用过去的股价预测下一期股价,因此相当于一个时间序列问题,可以用Elman神经网络求解。
x n = f ( x n − 1 , x n − 2 , x n − N ) {x_n} = f\left( {{x_{n - 1}},{x_{n - 2}},{x_{n - N}}} \right) xn=f(xn1,xn2,xnN)
对于给定的337条开盘价数据,首先将其划分为训练样本和测试样本。以训练样本为例,抽取 x 1 ∼ x N {x_1} \sim{x_N} x1xN组成第一个样本,其中 ( x 1 , x 2 , ⋯   , x N − 1 ) \left( {{x_1},{x_2}, \cdots ,{x_{N - 1}}} \right) (x1,x2,,xN1)为自变量, x N {x_N} xN为目标函数值;抽取 x 2 ∼ x N + 1 {x_2} \sim{x_{N+1}} x2xN+1组成第二个样本,其中 ( x 2 , x 3 , ⋯   , x N ) \left( {{x_2},{x_3}, \cdots ,{x_{N}}} \right) (x2,x3,,xN)为自变量, x N + 1 {x_{N+1}} xN+1为函数值,以此类推,最终形成以下训练矩阵:
[ x 1 x 2 x i x 2 x 3 x i + 1 ⋯ ⋯ ⋯ x N − 1 x N x N x N + 1 ] \left[ \begin{array}{l} {x_1}{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {x_2}{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {x_i}\\ {x_2}{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {x_3}{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {x_{i + 1}}\\ {\kern 1pt} {\kern 1pt} {\kern 1pt} \cdots {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} \cdots {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} \cdots \\ {x_{N - 1}}{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {x_N}\\ {x_N}{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {x_{N + 1}} \end{array} \right] x1x2xix2x3xi+1xN1xNxNxN+1

主要流程图如下:
在这里插入图片描述

三、算法步骤

主要步骤如下:

3.1 加载数据

代码如下:

%% 清除工作空间中的变量和图形
clear,clc
close all
% 加载337个上证指数开盘价格
load elm_stock
whos

列出当前工作空间中的变量:
Name Size Bytes Class Attributes

price 337x1 2696 double

3.2 构造样本集

抽取 x 1 ∼ x N {x_1} \sim{x_N} x1xN组成第一个样本,其中 ( x 1 , x 2 , ⋯   , x N − 1 ) \left( {{x_1},{x_2}, \cdots ,{x_{N - 1}}} \right) (x1,x2,,xN1)为自变量, x N {x_N} xN为目标函数值,以此类推,代码如下:

% 数据个数
n=length(price);

% 确保price为列向量
price=price(:);

% x(n) 由x(n-1),x(n-2),...,x(n-L)共L个数预测得到.
L = 6;

% price_n:每列为一个构造完毕的样本,共n-L个样本
price_n = zeros(L+1, n-L);
for i=1:n-L
    price_n(:,i) = price(i:i+L);
end

这里取N=6,即当期的开盘价,应由当期之前6期的开盘价计算得到。这一步将最初长度为337向量转化为7x331矩阵。

3.3 划分训练集和测试集

将前380份样本作为训练样本,最后51分样本作为测试样本 :

trainx = price_n(1:6, 1:280);
trainy = price_n(7, 1:280);

testx = price_n(1:6, 290:end);
testy = price_n(7, 290:end);

3.4 创建Elman神经网络

MATLAB神经网络工具箱提供了newelm与elmannet函数,都可以建立Elman反馈网络。这里采用elmannet函数,它只需要三个参数,分别指定延迟、隐含层神经元个数和训练函数。

% 包含15个神经元,训练函数为traingdx
net=elmannet(1:2,15,'traingdx');

% 设置显示级别
net.trainParam.show=1;

% 最大迭代次数为2000次
net.trainParam.epochs=2000;

% 误差容限,达到此误差就可以停止训练
net.trainParam.goal=0.00001;

% 最多验证失败次数
net.trainParam.max_fail=5;

% 对网络进行初始化
net=init(net);

3.5 网络训练

先归一化再训练。

%训练数据归一化
[trainx1, st1] = mapminmax(trainx);
[trainy1, st2] = mapminmax(trainy);

% 测试数据做与训练数据相同的归一化操作
testx1 = mapminmax('apply',testx,st1);
testy1 = mapminmax('apply',testy,st2);

% 输入训练样本进行训练
[net,per] = train(net,trainx1,trainy1);

训练过程如下:
在这里插入图片描述

3.6 测试

进行测试时应使用归一化后的数据,得出实际输出后再将输出结果反归一化为正常的数据。

% 将训练数据输入网络进行测试
train_ty1 = sim(net, trainx1);
train_ty = mapminmax('reverse', train_ty1, st2);

% 将测试数据输入网络进行测试
test_ty1 = sim(net, testx1);
test_ty = mapminmax('reverse', test_ty1, st2);

四、结果展示

预测值与真实值比较如下:
在这里插入图片描述


以上便是完整代码了,如果还是不懂,可以下载源码,参考资源:https://download.csdn.net/download/didi_ya/87734622。
制作不易,如果对你有所帮助,记得点个赞哟~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/467295.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

制冷暖通工业互联网平台服务商

制冷暖通工业互联网平台服务商可以提供以下服务: 系统架构设计:根据客户需求,制定适合的系统架构和技术路线,提供全面的技术咨询和方案设计服务。 平台开发和定制化:根据客户需求和系统设计,进行平台开发和…

【go】三色标记-垃圾回收机制

垃圾回收原因 : 垃圾回收是一种内存管理技术,它的主要目的是自动管理程序中的内存分配和释放,以减少内存泄漏和野指针等问题 赋值器与回收器: 赋值器(Mutator)是指程序中的执行部分,负责创建…

c++11 标准模板(STL)(std::priority_queue)(五)

适配一个容器以提供优先级队列 std::priority_queue 定义于头文件 <queue> template< class T, class Container std::vector<T>, class Compare std::less<typename Container::value_type> > class priority_queue; priority_queu…

docker 安装应用程序

此篇文章以 mysql 安装为例&#xff1a; 一、这里我们拉取官方的最新版本的镜像 docker pull mysql:latest二、使用以下命令来查看是否已安装了 mysql docker images在上图中可以看到我们已经安装了最新版本&#xff08;latest&#xff09;的 mysql 镜像。 三、运行容器 安…

一天学完UCOS III(上)

一、UCOS系统中的一些概念 1.UCOS任务状态 2.任务控制块&#xff08;OS_TCB&#xff09;&#xff1a;保存任务信息结构体 3.任务堆栈&#xff08;CPU_STK&#xff09;&#xff1a;创建任务时传把任务堆栈的参树传入 4.任务优先级&#xff1a;高优先级任务可以抢占低优先级任务…

NDK OpenGL渲染画面效果

NDK系列之OpenGL渲染画面效果技术实战&#xff0c;本节主要是通过OpenGL Java库&#xff08;谷歌对OpenGL C库做了JIN封装&#xff0c;核心实现还是在Native层&#xff09;&#xff0c;实现页面渲染&#xff0c;自定义渲染特效。 实现效果&#xff1a; 实现逻辑&#xff1a; 1…

如何学习FPGA?莱迪斯深力科电子LCMXO2-4000HC-4TG144C MachXO2系列 FPGA可编程逻辑简介

如何学习FPGA&#xff1f;莱迪斯深力科电子LCMXO2-4000HC-4TG144C MachXO2系列 FPGA可编程逻辑简介 FPGA是英文Field&#xff0d;Programmable Gate Array的缩写&#xff0c;即现场可编程门阵列&#xff0c;它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作…

【高分论文密码】大尺度空间模拟预测与数字制图

大尺度空间模拟预测和数字制图技术和不确定性分析广泛应用于高分SCI论文之中&#xff0c;号称高分论文密码。大尺度模拟技术可以从不同时空尺度阐明农业生态环境领域的内在机理和时空变化规律&#xff0c;又可以为复杂的机理过程模型大尺度模拟提供技术基础。在本次培训中&…

查询优化之单表查询

建表 CREATE TABLE IF NOT EXISTS article ( id INT(10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, author_id INT(10) UNSIGNED NOT NULL, category_id INT(10) UNSIGNED NOT NULL, views INT(10) UNSIGNED NOT NULL, comments INT(10) UNSIGNED NOT NULL, title VARBI…

Ajax和Json综合案例

1. 查询所有 创建brand.html,使用axios发送请求&#xff0c;其中查询一般采用get的请求方式 <script src"js/axios-0.18.0.js"></script><script>//1. 当页面加载完成后&#xff0c;发送ajax请求window.onload function () {//2. 发送ajax请求axi…

星辰天合亮相 2023 国际金融展,软件定义存储信创方案备受瞩目

4 月 25 日&#xff0c;为期三天的 2023 中国国际金融展在北京首钢会展中心开幕&#xff0c;本届展会以“荟萃金融科技成果&#xff0c;展现数字金融力量&#xff0c;谱写金融服务中国式现代化新篇章”为主题&#xff0c;全面展示金融业为完善科技创新体系、加快实现高水平科技…

轻量级「行泊一体」爆发前夜!这家智驾Tier1正加码抢占市场

伴随行泊一体成为产业演进的确定性趋势&#xff0c;如何踩准市场爆发的节奏成为重中之重。 高工智能汽车注意到&#xff0c;行泊一体当前呈分层发展趋势&#xff0c;从底层SOC算力划分&#xff1a;其一&#xff0c;5-20TOPS轻量级平台&#xff0c;提供基础L2级行车泊车需求&am…

被修饰成单栋的倾斜摄影处理思路

作者&#xff1a;kele 前言 倾斜摄影数据是三维项目系统中的常客。在某些项目中&#xff0c;为了给倾斜摄影上的建筑赋予属性信息&#xff0c;实现点击建筑高亮并展示属性的功能&#xff0c;客户将倾斜摄影数据进行了模型单体化&#xff08;使用pdmodeler或者其它软件&#xf…

Java 版Spring cloud 企业工程项目管理系统平台源码(三控:进度组织、质量安全、预算资金成本、二平台:招采、设计管理)

工程项目管理软件&#xff08;工程项目管理系统&#xff09;对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营&#xff0c;全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#…

思科实验 voip通信的配置(内附命令超详细)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a;小刘主页 ♥️每天分享云计算网络运维课堂笔记&#xff0c;努力不一定有收获&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的绽放&#xff0…

leetcode-328 奇偶链表

题目如下&#xff1a; 给定单链表的头节点 head &#xff0c;将所有索引为奇数的节点和索引为偶数的节点分别组合在一起&#xff0c;然后返回重新排序的列表。 第一个节点的索引被认为是 奇数 &#xff0c; 第二个节点的索引为 偶数 &#xff0c;以此类推。 请注意&#xff0c;…

10个必须掌握的SQL常用语句

世界上70%的相关性数据可以被储存为表格数据&#xff0c;即类似Excel&#xff0c;Csv类型的数据&#xff0c;如何去查询和分析相关性的数据&#xff1f;对于少量数据&#xff0c;我们可以使用Excel&#xff0c;更多一点数据&#xff0c;我们可以使用Python, pandas 处理大数据 …

区块链学习一(FISCO BCOS部署控制台部署第一个HelloWorld)

系统环境&#xff1a;CentOS Linux release 7.6.1810 fisco版本&#xff1a;3.3.0 jdk版本&#xff1a;1.8 第一步 安装依赖 sudo yum install -y curl openssl openssl-devel wget第二步 创建操作目录 mkdir fiscocd fisco第三步 下载安装脚本 curl -LO https://github.co…

chatGPT推荐2个key免费使用

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 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同时推荐一下一个国内比较稳定的代理 #查询余额 curl https://api.openai-proxy.com/pro/balance?apiKeysk-XXX | jqPython代码也可以查询 import requests impor…

生成对抗网络CycleGAN

1.介绍 论文&#xff1a;Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks 论文地址&#xff1a;https://arxiv.org/abs/1703.10593 什么是CycleGAN&#xff1a;CycleGAN主要用于图像之间的转换&#xff0c;假设有两个不成对的图像X和Y&am…