【MATLAB数据处理实用案例详解(13)】——利用Elman网络实现上证股市开盘价预测
目录
- 一、问题描述
- 二、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(xn−1,xn−2,xn−N)
对于给定的337条开盘价数据,首先将其划分为训练样本和测试样本。以训练样本为例,抽取 x 1 ∼ x N {x_1} \sim{x_N} x1∼xN组成第一个样本,其中 ( x 1 , x 2 , ⋯ , x N − 1 ) \left( {{x_1},{x_2}, \cdots ,{x_{N - 1}}} \right) (x1,x2,⋯,xN−1)为自变量, x N {x_N} xN为目标函数值;抽取 x 2 ∼ x N + 1 {x_2} \sim{x_{N+1}} x2∼xN+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+1⋯⋯⋯xN−1xNxNxN+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} x1∼xN组成第一个样本,其中 ( x 1 , x 2 , ⋯ , x N − 1 ) \left( {{x_1},{x_2}, \cdots ,{x_{N - 1}}} \right) (x1,x2,⋯,xN−1)为自变量, 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-Lprice_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。
制作不易,如果对你有所帮助,记得点个赞哟~
【MATLAB数据处理实用案例详解(13)】——利用Elman网络实现上证股市开盘价预测相关推荐
- 【MATLAB图像处理实用案例详解】目录
未来一个月的任务主要是GAN生成对抗网络理论部分+代码实战和MATLAB图像处理实用案例详解. 做生成对抗网络主要是因为我的研究方向涉及到这个部分,因此将其作为主要研究内容,但由于研究方向的私密性问题 ...
- 【MATLAB图像处理实用案例详解(6)】—— 基于特征匹配的英文印刷字符识别
目录 一.背景意义 二.理论基础 2.1 图像预处理 2.2 图像识别技术 2.2.1 统计特征字符识别技术 2.2.2 结构特征字符识别技术 2.2.3 基于机器学习的识别技术 三.效果演示 一.背 ...
- 【MATLAB图像处理实用案例详解(1)】—— 基于直方图优化的图像去雾技术
目录 一.背景意义 二.理论基础 2.1 空域图像増强 2.2 直方图均衡化 三.方法选择 3.1 全局直方图算法 3.2 局部直方图算法 3.3 Retinex算法 四.效果演示 五.完整代码 一. ...
- 【MATLAB图像处理实用案例详解(3)】—— 基于阈值分割的车牌定位识别
目录 一.背景意义 二.理论基础 2.1 车牌区域分割: 2.2 车牌定位及裁剪 三.算法流程 3.1 车牌图像处理 3.1.1 图像灰度化 3.1.2 图像二值化 3.1.3 图像边缘检测 3.1. ...
- MacOS 的 Automator 实用案例详解
文章目录 创建新建文本文件的服务 创建批量开启多个应用程序的服务 创建批量开启多个应用程序的程序 创建退出所有程序的服务 如何删除/隐藏创建的服务 删除服务 隐藏服务 创建新建文本文件的服务 打开 A ...
- matlab guide图像处理实例,现代数字图像处理技术提高及应用案例详解 MATLAB版-教科书.pdf...
数字,图像处理,技术,提高,应用,案例,详解,教科书 [General Information] 书名=现代数字图像处理技术提高及应用案例详解 MATLAB版 作者=赵小川编著 页数=384 SS号 ...
- 【原创干货】6000字、22个案例详解Pandas数据分析/预处理时的实用技巧,超简单...
上两篇原创的文章,小编主要是讲了数据可视化方面的内容,但是好像看得人不是很多的样子(搞得小编心里拔凉拔凉的....) [硬核干货]4500字.10个案例分享几个Python可视化小技巧,助你绘制高质量 ...
- Visual C++网络编程经典案例详解 第9章 实用播放器 数据读取与播放控制 识别数据文件信息
识别数据文件信息主要是指对mp3数据格式识别 定义顺序代码如下 typedef struct mp3_struct //自定义mp3结构体 {char heade[3]; //tag字符标记char ...
- 数据湖架构Hudi(五)Hudi集成Flink案例详解
五.Hudi集成Flink案例详解 5.1 hudi集成flink flink的下载地址: https://archive.apache.org/dist/flink/ Hudi Supported ...
最新文章
- GitHub上的这本开源算法书火爆了
- DevExpress的下拉框控件ComboBoxEdit控件的使用
- Elasticsearch概述、ES概念、什么是搜索、全文检索、Elasticsearch功能,什么是distributed document store(来自网络+学习资料)
- 【转】自然语言系列学习之表示学习与知识获取(三)知识图谱
- 简单说明c语言中常用的基本数据类型有哪些,C语言基本数据类型的.ppt
- Python中操作mysql知识(一)
- [笔记]java-package
- 微电台│Get产品信息管理指南,和客户谈一场全渠道恋爱!
- IT工作者平日要做好自我调节
- Linux全攻略--DHCP服务器配置与管理
- 计算机专业学ROSTCM,ROST-CM软件分词和词频统计用法体验
- 推荐一些游戏项目,直接起飞,不看后悔
- 基于matlab 的燃油喷雾图像处理方法,基于matlab的燃油喷雾图像处理方法
- idea设置字体大小样式和背景色
- 坐标转换-大地坐标系与空间直角坐标系(附软件下载)
- 计算机权限全部用户,允许所有人权限应用于匿名用户 (Windows 10) - Windows security | Microsoft Docs...
- 已解决【Watch检查软件更新失败,因为你尚未接入互联网。】
- ★如何引导客户需求?几个经…
- 浅谈大数据任务调度平台
- 20190919题目总结——选择题
热门文章
- 物联网平台开发 污染物在线监控(监测)系统数据传输标准(HJ 212-2017代替HJ/T 212-2005)
- 【阿里云】| 智能对话机器人(云小蜜) | 快速开发入门
- 分享Silverlight 3D开源项目和Silverlight/WPF/Windows Phone一周学习导读(4月25日-4月29日)...
- visio去掉背景网格线
- B. Points on Plane(二分)
- django文件上传到服务器,django上传文件的三种方式
- 打造多链生态,促进Web3的应用
- jsp实现在线聊天系统
- Tips:error C4996: 'GetVersionExA': 被声明为已否决
- 上市公司企业持续创新能力、创新可持续性(原始数据+计算代码+计算结果)(2008-2021年)