目录

  • 一、问题描述
  • 二、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] ​x1​x2​xi​x2​x3​xi+1​⋯⋯⋯xN−1​xN​xN​xN+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网络实现上证股市开盘价预测相关推荐

  1. 【MATLAB图像处理实用案例详解】目录

    未来一个月的任务主要是GAN生成对抗网络理论部分+代码实战和MATLAB图像处理实用案例详解. 做生成对抗网络主要是因为我的研究方向涉及到这个部分,因此将其作为主要研究内容,但由于研究方向的私密性问题 ...

  2. 【MATLAB图像处理实用案例详解(6)】—— 基于特征匹配的英文印刷字符识别

    目录 一.背景意义 二.理论基础 2.1 图像预处理 2.2 图像识别技术 2.2.1 统计特征字符识别技术 2.2.2 结构特征字符识别技术 2.2.3 基于机器学习的识别技术 三.效果演示 一.背 ...

  3. 【MATLAB图像处理实用案例详解(1)】—— 基于直方图优化的图像去雾技术

    目录 一.背景意义 二.理论基础 2.1 空域图像増强 2.2 直方图均衡化 三.方法选择 3.1 全局直方图算法 3.2 局部直方图算法 3.3 Retinex算法 四.效果演示 五.完整代码 一. ...

  4. 【MATLAB图像处理实用案例详解(3)】—— 基于阈值分割的车牌定位识别

    目录 一.背景意义 二.理论基础 2.1 车牌区域分割: 2.2 车牌定位及裁剪 三.算法流程 3.1 车牌图像处理 3.1.1 图像灰度化 3.1.2 图像二值化 3.1.3 图像边缘检测 3.1. ...

  5. MacOS 的 Automator 实用案例详解

    文章目录 创建新建文本文件的服务 创建批量开启多个应用程序的服务 创建批量开启多个应用程序的程序 创建退出所有程序的服务 如何删除/隐藏创建的服务 删除服务 隐藏服务 创建新建文本文件的服务 打开 A ...

  6. matlab guide图像处理实例,现代数字图像处理技术提高及应用案例详解 MATLAB版-教科书.pdf...

    数字,图像处理,技术,提高,应用,案例,详解,教科书 [General Information] 书名=现代数字图像处理技术提高及应用案例详解 MATLAB版 作者=赵小川编著 页数=384 SS号 ...

  7. 【原创干货】6000字、22个案例详解Pandas数据分析/预处理时的实用技巧,超简单...

    上两篇原创的文章,小编主要是讲了数据可视化方面的内容,但是好像看得人不是很多的样子(搞得小编心里拔凉拔凉的....) [硬核干货]4500字.10个案例分享几个Python可视化小技巧,助你绘制高质量 ...

  8. Visual C++网络编程经典案例详解 第9章 实用播放器 数据读取与播放控制 识别数据文件信息

    识别数据文件信息主要是指对mp3数据格式识别 定义顺序代码如下 typedef struct mp3_struct //自定义mp3结构体 {char heade[3]; //tag字符标记char ...

  9. 数据湖架构Hudi(五)Hudi集成Flink案例详解

    五.Hudi集成Flink案例详解 5.1 hudi集成flink flink的下载地址: https://archive.apache.org/dist/flink/ Hudi Supported ...

最新文章

  1. GitHub上的这本开源算法书火爆了
  2. DevExpress的下拉框控件ComboBoxEdit控件的使用
  3. Elasticsearch概述、ES概念、什么是搜索、全文检索、Elasticsearch功能,什么是distributed document store(来自网络+学习资料)
  4. 【转】自然语言系列学习之表示学习与知识获取(三)知识图谱
  5. 简单说明c语言中常用的基本数据类型有哪些,C语言基本数据类型的.ppt
  6. Python中操作mysql知识(一)
  7. [笔记]java-package
  8. 微电台│Get产品信息管理指南,和客户谈一场全渠道恋爱!
  9. IT工作者平日要做好自我调节
  10. Linux全攻略--DHCP服务器配置与管理
  11. 计算机专业学ROSTCM,ROST-CM软件分词和词频统计用法体验
  12. 推荐一些游戏项目,直接起飞,不看后悔
  13. 基于matlab 的燃油喷雾图像处理方法,基于matlab的燃油喷雾图像处理方法
  14. idea设置字体大小样式和背景色
  15. 坐标转换-大地坐标系与空间直角坐标系(附软件下载)
  16. 计算机权限全部用户,允许所有人权限应用于匿名用户 (Windows 10) - Windows security | Microsoft Docs...
  17. 已解决【Watch检查软件更新失败,因为你尚未接入互联网。】
  18. ★如何引导客户需求?几个经…
  19. 浅谈大数据任务调度平台
  20. 20190919题目总结——选择题

热门文章

  1. 物联网平台开发 污染物在线监控(监测)系统数据传输标准(HJ 212-2017代替HJ/T 212-2005)
  2. 【阿里云】| 智能对话机器人(云小蜜) | 快速开发入门
  3. 分享Silverlight 3D开源项目和Silverlight/WPF/Windows Phone一周学习导读(4月25日-4月29日)...
  4. visio去掉背景网格线
  5. B. Points on Plane(二分)
  6. django文件上传到服务器,django上传文件的三种方式
  7. 打造多链生态,促进Web3的应用
  8. jsp实现在线聊天系统
  9. Tips:error C4996: 'GetVersionExA': 被声明为已否决
  10. 上市公司企业持续创新能力、创新可持续性(原始数据+计算代码+计算结果)(2008-2021年)