m基于GA遗传优化的BP神经网络时间序列预测算法matlab仿真

news2024/11/27 1:02:44

目录

1.算法描述

2.仿真效果预览

3.MATLAB核心程序

4.完整MATLAB


1.算法描述

       将遗传算法(GA)与BP神经网络相结合,使用GA优化BP神经网络的主要参数。然后将影响输出响应值的多个特征因素作为GA-BP神经网络模型的输入神经元, 输出响应值作为输出神经元进行预测测试。BP神经网络的网络层包括输入层,隐含层和输出层三个网络层次,其基本结构如下图所示:

基于三层网络结构的BP神经网络具有较为广泛的应用场合和训练效果。

        在BP神经网络中,隐含层数量对神经网络的性能有着至关重要的影响,如果隐含层数量过多,会大大增加BP神经网络的内部结构的复杂度,从而降低学习效率,增加训练时间;如果隐含层数量过少,则无法精确获得训练输入数据和输出结果之间的内在规律,增加预测误差。因此,选择合适的隐含层个数具有十分重要的意义。由于隐含层个数的设置没有明确的理论可以计算,通常情况下,采用逐次分析的方法获得,即通过对不同隐含层所对应的神经网络进行预测误差的仿真分析,选择误差最小情况下所对应的隐含层个数。

        学习率,即网络权值得更新速度,当学习率较大的时候,网络权值的更新速度快,当网络稳定性会下降;当学习率较小的时候,网络权值的更新速度慢,网络较为稳定。这里选择BP神经网络的学习率方式参考上一章节隐含层的选择方式,即通过对比不同学习率的网络训练误差,选择性能较优的学习率。

       BP神经网络的初始网络权值对网络训练的效率以及预测性能有着较大的影响,通常情况下,采用随机生成[-1,1]之间的随机数作为BP神经网络的初始权值。

        本文,通过matlab的BP神经网络工具箱函数newff来构建BP神经网络,通过newff函数构建BP网络,其主要步骤如下:

         第一,BP神经网络初始化后,其matlab程序如下:

         net = newff(traindata, trainaim, HiddenNum);

        其中traindata表示训练数据,trainaim表示训练目标,HiddenNum表示BP神经网络隐含层个数,net表示BP神经网络模型函数。

         第二,BP神经网络参数设置,其matlab程序所示:

设置学习率,其matlab程序为 net.trainParam.lr = 0.25;

设置训练误差目标,其matlab程序为net.trainParam.goal = 1e-8;

设置神经网络训练次数,其matlab程序为net.trainParam.epochs = 200;

        第三,BP神经网络的训练,其matlab程序所示:

        net = train(net,train_data,train_aim);

这里通过train函数对神经网络net进行训练,得到训练后的BP神经网络模型。

其算法流程图如图2所示:

        从图8的算法流程图可知,基于自适应遗传优化的BP神经网络模型其主要通过交叉概率与变异概率的自适应调节,使个体对网络权值进行不断的更新,从而提高BP神经网络的预测精度。通过MATLAB对BP神经网络,基于遗传优化的BP神经网络,基于改进遗传优化的BP神经网络以及基于改进遗传优化的组合BP神经网络等多种算法的股价预测性能。从仿真结果可知,基于改进遗传优化的组合BP神经网络性能略优于改进遗传优化的BP神经网络,而比起传统的BP神经网络预测算法和基于传统遗传优化的BP神经网络预测算法,具有较大的性能优势。

2.仿真效果预览

matlab2022a仿真结果如下:

 

 

 

 

3.MATLAB核心程序

C    = OHLC(:,4); 
Mins = min(C);
Maxs = max(C);
C    = (C-Mins)/(Maxs-Mins);
LEN = 10;
%样本的划分
for i = 1:length(C)-LEN
    Price1(:,i) = C(i:i+LEN-1);
    Price2(i)   = C(i+LEN);
end

%训练样本
L1 = floor(0.6*length(Price2));
for i = 1:L1
    train_data(:,i) = Price1(:,i); 
    train_aim(i)    = Price2(i);
end

%测试样本
L2 = length(Price2) - L1;
for i = 1:L2
    test_data(:,i) = Price1(:,i+L1); 
    test_aim(i)    = Price2(i+L1);
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%如下的是改进BP网络算法
%定义神经网络的各个层的个数
Num_In     = LEN;
Num_Hidden = 5;
Num_Out    = 1;
%构建BP网络
net        = newff(train_data,train_aim,Num_Hidden);

ERR1 = [];
ERR2 = [];
ERR3 = [];


%通过改进遗传算法优化BP参数
net        = func_newGA2(net,Num_In,Num_Hidden,Num_Out,train_data,train_aim);
%网络训练
net.trainParam.showWindow = 0;
net        = train(net,train_data,train_aim);
outputs    = sim(net,test_data);
d1         = test_aim*(Maxs-Mins) + Mins;
d2         = outputs*(Maxs-Mins) + Mins;

ERR1   = [ERR1,mean(abs(d1-d2)./d2) ];
ERR2   = [ERR2,mean((abs(d1-d2)./d2).^2) ];
ERR3   = [ERR3,std((abs(d1-d2)./d2).^2) ];
02_034m

4.完整MATLAB

V

V

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

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

相关文章

[附源码]计算机毕业设计springboot绿色生鲜

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

nfs实现共享目录对于集群高可用风险,nfs客户端容易卡死

目录 背景说明 解决办法 执行步骤 数据移动 取消挂载 停nfs服务(客户端) 卸载nfs(客户端) 重启主机(客户端) 卸载nfs(服务端) 背景说明 nfs可以完成集群多个主机之间共享目…

感知算法工程师面试===目标检测===YOLO v3

引言 因为找工作的原因,面试中经常遇到目标检测的问题,在2022年的现在,大多是对单步目标检测算法YOLO家族系列展开一系列追问,比如Yolov3、Yolov4、Yolov5、Yolox算法。 另一部分就是Faster RCNN为代表的两阶段目标检测网络。 而…

[附源码]计算机毕业设计JAVA小区宠物管理系统

[附源码]计算机毕业设计JAVA小区宠物管理系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybati…

blender UV基础

文章目录进入UV界面导出UV布局图拆分UV清除现有UV展开UV不同UV展开方式智能UV投射缝合边进入UV界面 1 选中一个物体,选择最上方UVEditing即可进入UV界面 2 注意进入UV界面后,舞台也会自动进入编辑模式 3 只有在编辑模式里才能操作UV 4 选择一个面来单独…

Linux学习-61-Linux系统服务管理

14 Linux系统服务管理 系统服务:服务是在后台运行的应用程序,并且可以提供一些本地系统或网络的功能。Linux 中常见的服务有那些,这些服务怎么分类,服务如何启动,服务如何自启动,服务如何查看?…

Codeforces Round #725 (Div. 3) F. Interesting Function

翻译&#xff1a; 给出两个整数&#x1d459;和&#x1d45f;&#xff0c;其中&#x1d459;<&#x1d45f;。我们将在&#x1d459;上加1&#xff0c;直到结果等于&#x1d45f;。因此&#xff0c;执行的添加恰好是&#x1d45f;−&#x1d459;。对于每一个这样的加法&am…

pytest文档84 - 把收集的 yaml 文件转成pytest 模块和用例

前言 前面实现了一个基础的读取yaml文件内容&#xff0c;当成用例去执行。虽然入门简单&#xff0c;但需要扩展功能&#xff0c;比如在 yaml 用例实现参数化&#xff0c;就不好扩展了。 因为它并不是一个真正的pytest的模块和用例&#xff0c;无法被钩子函数探测到。所以这篇会…

CV攻城狮入门VIT(vision transformer)之旅——VIT原理详解篇

&#x1f34a;作者简介&#xff1a;秃头小苏&#xff0c;致力于用最通俗的语言描述问题 &#x1f34a;往期回顾&#xff1a;CV攻城狮入门VIT(vision transformer)之旅——近年超火的Transformer你再不了解就晚了&#xff01; &#x1f34a;近期目标&#xff1a;写好专栏的每一篇…

Linux centos7.6 安装elasticsearch8.x (es8) 教程

系列-Linux centos7.6 安装elasticsearch8.x (es8) 教程 Linux centos7.6 安装elasticsearch8.x (es8) 教程_言之有李LAX的博客-CSDN博客 系列-linux安装elasticsearch-head &#xff08;es可视化界面&#xff09; linux安装elasticsearch-head &#xff08;es可视化界面&am…

隆重推出 Incredibuild 10

变更可能来的很快&#xff0c;也可能来的很慢。但有时候&#xff0c;它真的值得我们等待。您并非每天都能目睹一个很棒的平台进一步发展成为一个不可思议&#xff08;Incredible&#xff09;的平台。今天&#xff0c;我们将正式发布最新版本——Incredibuild 10&#xff01;经过…

SIMetrix导入MOS管参数的另一种方法

问题的提出 在采用SIMetrix 8.3软件进行E类放大器的仿真过程中&#xff0c;用到了NEXPERIA公司的NMOS管器件PMH550UNE, 但在SIMetrix 8.3的库中没有该器件&#xff0c;因此需要导入第三方库文件. 通常的办法是从生产该器件的公司网站上下载器件库文件&#xff0c;导入到SIMet…

《QDebug 2022年11月》

一、Qt Widgets 问题交流 二、Qt Quick 问题交流 1.QtQuick.Dialogs 1.x 中的 MessageDialog 触发两次 accepted 、rejected [QTBUG-94126] If inherit QApplication, the MessageDialog accepted signal is emitted twice. - Qt Bug Tracker 当使用 QApplication 而不是 Q…

React 中ref 的使用(类组件和函数组件)以及forwardRef 与 useImperativeHandle 详解

前言 在一个父组件中&#xff0c;我们想要获取到其中的节点元素或者子组件实例&#xff0c;从而直接调用其上面的方法。Class 类组件和函数组件是两种不同的写法。 1. Class 组件中使用ref 在 React 的 Class 组件中&#xff0c;我们通过 createRef 创建 ref class Parent …

传统制造企业进行数字化转型,是翻身还是翻船?

数实融合正在从可选项&#xff0c;变成每个行业都要面对的必选项&#xff0c;制造企业也从野蛮生长逐渐步入有序的数字化世界。 出品|产业家 2022年&#xff0c;疫情及经济环境全面淬炼了各行各业&#xff0c;大多数能有效应用数字化持续经营的企业成为幸存者&#xff0c;数字…

信号与进程间通信

目录结束进程结束后台进程结束前台进程信号基本概念接收信号发送信号代码演示接收信号函数&#xff08;signal&#xff09;SIG_IGNSIG_DFL自定义函数发送信号&#xff08;kill&#xff09;接收信号解决僵尸进程结束进程 结束后台进程 终端1&#xff1a;./main killed 终端2&a…

Linux系统编程(五)——Linux下的多线程

目录 0x01 线程概述 一、线程和进程的区别 二、线程和进程的虚拟地址空间 三、线程之间共享的非共享资源 四、NPTL 0x02 创建线程 0x03 终止线程 0x04 连接已终止的进程 0x05 线程的分离 0x06 线程取消 0x07 线程属性 0x08 线程同步 一、互斥锁 二、死锁 三、如何…

三肽Gly-Cys-Gly、88440-55-5

三肽Gly-Cys-Gly 编号&#xff1a;111774 CAS号&#xff1a;88440-55-5 三字母&#xff1a;H2N-Gly-Cys-Gly-COOH 描 述&#xff1a;羧肽酶 U 抑制剂&#xff08;凝血酶可激活的纤维蛋白溶解抑制剂&#xff0c;TAFI&#xff09;&#xff0c;Ki 0.14 μM。编号: 111774 中文名称…

Java#29(集合进阶2---双列集合)

目录 一.Map------------双列集合-----------一次添加一对元素,如: 小明 99岁 1.特点: 2.Map中常见的API 3.Map集合的遍历方式 4.HashMap 5.LinkedHashMap 6.TreeMap 一.Map------------双列集合-----------一次添加一对元素,如: 小明 99岁 1.特点: (1)双列集合一次需要…

在嵌入式里面实现printf()类似的功能

学习C语言大多数都是从printf("hello world")开始的&#xff0c;对于printf的熟悉程度最高&#xff0c;在嵌入式编程中&#xff0c;实现printf函数有一种很标准的办法就是实现putch&#xff0c;绑定对应的串口输出&#xff0c;设置好波特率&#xff0c;使能串口就可以…