【开盘指数预测】基于matlab遗传算法优化小波神经网络GA-ANN股票开盘指数预测【含Matlab源码 2014期】

本文主要是介绍【开盘指数预测】基于matlab遗传算法优化小波神经网络GA-ANN股票开盘指数预测【含Matlab源码 2014期】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

⛄一、遗传算法优化小波神经网络简介

1 小波神经网络
1.1 小波神经网络结构

小波神经网络分为松散型与融合型两类, 前者将小波分析作为神经网络的前置手段, 对网络输入初步优化, 使得信息便于神经网络的处理, 但这类WNN并未改变隐含层的传递函数, 依然存在神经网络的固有缺陷;后者采用小波元替代神经元, 用小波函数的伸缩、平移参数替代输入层到隐含层的权值及隐含层阈值, 是小波和神经网络的直接融合。本文研究采用融合性WNN, 其网络拓扑结构如图1所示。
在这里插入图片描述
图1 融合性小波神经网络拓扑结构图
图1中各个字母代表含义如下:
x1, x2, …, xM:输入层数据;
wj, k:输入层到隐含层的权值参数;
ψa, b (x) :小波基函数, 本文采用Morlet函数, 其表达式如下:
在这里插入图片描述
a、b分别为小波基函数的伸缩参数和平移参数;
wi, j:隐含层到输出层的权值参数;
σ (I-t) :输出层Sigmoid函数, 其表达式如下:
在这里插入图片描述
I、t分别为输出的输入和阈值。

y1, y2, …, yN:输出层数据。

1.2 小波神经网络算法思想
为求得WNN的稳定结构, 首先借助训练集数据进行学习, 其次借助测试集数据对网络结构验证。在学习过程的第一阶段, 将经隐含层处理的样本数据作为输出向前传播, 然后与期望输出对比, 若不匹配, 则进入第二阶段。此阶段将输出误差以某种形式反向传至各层神经元, 从而获取调整各个神经元权值的误差信号。经过两个阶段重复迭代, 修正WNN网络的参数。在训练中, 以输出误差限定值或设定的迭代次数作为终止条件。整体思想如以下伪代码所示:

While不满足终止条件{
遍历训练集中的每个样本:
#1将每个样本输入沿着网络前向传播计算
输入层到隐含层:
隐含层输入表达式:
在这里插入图片描述
隐含层输出表达式:
在这里插入图片描述
隐含层到输出层:

输出层输入表达式:
在这里插入图片描述
输出层输出表达式:
在这里插入图片描述
#2使用误差项后项传播

误差函数:
在这里插入图片描述
式中:P为样本个数, dnp为输出层第n个节点的期望输出, ynp为实际输出。

输出层权重更新表达式:
在这里插入图片描述
输出层阈值调整表达式:
在这里插入图片描述
隐含层权值调整表达式:
在这里插入图片描述
伸缩参数调整表达式:
在这里插入图片描述
平移参数调整表达式:
在这里插入图片描述
式 (8) -式 (12) 中η均为小波神经网络的学习效率。

2 GA优化WNN预测算法
2.1 遗传算法

遗传算法GA (Genetic Algorithm) 是借鉴生物界优胜劣汰的进化规律演化而来的一种并行随机搜索算法, 其主要思想是把问题参数编码为染色体, 对染色体进行一系列运算。即由选择算子获得优良个体遗传给下一代;利用交叉算子进行模式重组;利用变异算子进行模式突变。经过循环这些遗传操作, 种群向有利的方向进化, 最终得到所求问题最优解。遗传算法的随机搜索能力, 使其能够避免陷入局部最优, 且有着较好的收敛速度, 可以在小波参数优化问题上充分发挥优势。

遗传算法优化的主要要素:

(1) 编码设置由于待优化参数较多, 文中遗传算法采用实数编码, 通过对种群中具有某种形式的个体进行遗传操作, 获取群体中最优个体, 然后通过解码得到网络最佳参数。

(2) 适应度函数遗传算法在迭代过程中将适应度函数作为个体优劣的评价依据, 其评估结果可直接作为选择算子的依据, 不需要外部信息。本文中适应度函数确定为:
在这里插入图片描述
式中:E是小波神经网络的误差函数。

(3) 遗传操作遗传操作是遗传算法的核心, 其目的是通过逐代优化获得问题最优解, 包括三个基本遗传算子:选择、交叉、变异。

选择算子, 在迭代过程中选择优质的个体, 淘汰劣质的个体, 本文采用基于适应度比例选择策略的轮盘赌法。

交叉算子, 选择操作后的新一代群体, 按一定的概率在两两之间进行交叉操作。交叉概率PC的大小将影响算法的全局搜索能力, 一般较大的交叉概率可以促进种群进化。

变异算子, 随机改变种群个体编码串上的值, 即某个个体的个别基因发生0-1反转。变异操作按一定的概率Pm进行, 其目的一方面是使算法具有局部搜索能力, 另一方面是保持群体多样性, 防止早熟现象的发生。

2.2 GA-WNN工作步骤
利用遗传算法对网络权值优化的全局搜索能力与神经网络良好的逼近能力, 可以对复杂的短时交通流量建模, 克服了传统小波神经网络训练时易陷入局部极值的弊端。遗传算法优化小波神经网络的原理如图2所示。
在这里插入图片描述
图2 遗传算法优化小波神经网络流程图

算法的基本步骤如下:

Step1设种群规模为M。随机生成初始种群N= (N1, N2, …, NM) , 采用实数编码对个体Ni编码。

Step2用Step1中的种群N进行训练, 此时的WNN参数由初始化获得。

Step3计算种群N中每个个体的适应度值。若满足终止条件则跳至Step6, 不满足则执行Step4。

Step4对于适应度大的个体, 选择其中一部分直接继承给下一代, 同时将遗传操作后产生的最差个体用父代适应度最大的个体替代。

Step5对当前一代群体进行交叉和变异等遗传操作, 产生下一代群体, 转Step3。

Step6循环结束, 将最后一代群体中最优个体的解码还原值作为WNN的初始参数。

Step7采用Step6获取的最优参数建立短时交通流量预测模型。

⛄二、部分源代码

tic
% 清空环境变量
clc,clear
% 网络参数配置
load stock_index
%节点个数
inputnum=6;
hiddennum=7;
outputnum=1;
NIND=40; %个体数目
MAXGEN=50; %最大遗传代数
NVAR=inputnumhiddennum+hiddennum+hiddennum+hiddennumoutputnum; %变量维数
PRECI=inputnumhiddennum+hiddennum+hiddennum+hiddennumoutputnum; %变量二进制位数
GGAP=0.9; %代沟
% 输入输出数据归一化
[inputn,inputps]=mapminmax(input’);
[outputn,outputps]=mapminmax(output’);
inputn=inputn’;
outputn=outputn’;
%节点初始化
y=zeros(1,outputnum);
net=zeros(1,hiddennum);
net_ab=zeros(1,hiddennum);
%遗传算法
trace=zeros(MAXGEN,2);
FieldD=[rep([PRECI],[1,NVAR]);rep([0;1],[1,NVAR]);rep([1;0;1;1],[1,NVAR])];
Chrom=crtbp(NIND,NVAR*PRECI);
C_x=bs2rv(Chrom,FieldD);
gen=0;
%调用函数
for i=1:NIND
ObjV(i,1)=objfun(C_x(i,:),y,inputnum,hiddennum,outputnum,net,input,inputn,outputn);
end
while gen<MAXGEN,
FitnV=ranking(ObjV);
SelCh=select(‘sus’,Chrom,FitnV,GGAP);
SelCh=recombin(‘xovsp’,SelCh,0.7);
SelCh=mut(SelCh);
for i=1:size(SelCh,1)
C_y=bs2rv(SelCh,FieldD);
ObjVSel(i,1)=objfun_1(C_y(i,:),y,inputnum,hiddennum,outputnum,net,input,inputn,outputn);
end
[Chrom ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel);
gen=gen+1;
[Y,I]=min(ObjV);
trace(gen,1)=min(ObjV);
trace(gen,2)=sum(ObjV)/length(ObjV);

  plot(trace(:,1));hold on;plot(trace(:,2),'-.');grid;legend('种群均值变化','解的变化')

end
bestchrom=C_x(I,:);
%
Wjk=bestchrom(1:inputnumhiddennum);
b=bestchrom(inputnum
hiddennum+1:inputnumhiddennum+hiddennum);
a=bestchrom(inputnum
hiddennum+hiddennum+1:inputnumhiddennum+hiddennum+hiddennum);
Wij=bestchrom(inputnum
hiddennum+hiddennum+hiddennum+1:inputnumhiddennum+hiddennum+hiddennum+hiddennumoutputnum);
%赋给网络权值和阈值
Wjk=reshape(Wjk,hiddennum,inputnum);Wjk_1=Wjk;Wjk_2=Wjk_1;
Wij=reshape(Wij,outputnum,hiddennum);Wij_1=Wij;Wij_2=Wij_1;
b=reshape(b,1,hiddennum);b_1=b;b_2=b_1;
a=reshape(a,1,hiddennum);a_1=a;a_2=a_1;

lr1=0.01; %学习概率
lr2=0.001; %学习概率
maxgen=100; %迭代次数
%节点初始化
y=zeros(1,outputnum);
net=zeros(1,hiddennum);
net_ab=zeros(1,hiddennum);

%权值学习增量初始化
d_Wjk=zeros(hiddennum,inputnum);
d_Wij=zeros(outputnum,hiddennum);
d_a=zeros(1,hiddennum);
d_b=zeros(1,hiddennum);
% 网络训练
for i=1:maxgen

%误差累计
error(i)=0;% 循环训练
for kk=1:size(input,1)x=inputn(kk,:);yqw=outputn(kk,:);for j=1:hiddennumfor k=1:inputnumnet(j)=net(j)+Wjk(j,k)*x(k);net_ab(j)=(net(j)-b(j))/a(j);endtemp=mymorlet(net_ab(j));for k=1:outputnumy=y+Wij(k,j)*temp;   %小波函数endend

⛄三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 李会超,李鸿,张博.基于遗传算法优化小波神经网络的短时交通流量预测[J].计算机应用与软件. 2018,35(07)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

这篇关于【开盘指数预测】基于matlab遗传算法优化小波神经网络GA-ANN股票开盘指数预测【含Matlab源码 2014期】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/439652

相关文章

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

Java实现复杂查询优化的7个技巧小结

《Java实现复杂查询优化的7个技巧小结》在Java项目中,复杂查询是开发者面临的“硬骨头”,本文将通过7个实战技巧,结合代码示例和性能对比,手把手教你如何让复杂查询变得优雅,大家可以根据需求进行选择... 目录一、复杂查询的痛点:为何你的代码“又臭又长”1.1冗余变量与中间状态1.2重复查询与性能陷阱1.

Python内存优化的实战技巧分享

《Python内存优化的实战技巧分享》Python作为一门解释型语言,虽然在开发效率上有着显著优势,但在执行效率方面往往被诟病,然而,通过合理的内存优化策略,我们可以让Python程序的运行速度提升3... 目录前言python内存管理机制引用计数机制垃圾回收机制内存泄漏的常见原因1. 循环引用2. 全局变

Python多线程应用中的卡死问题优化方案指南

《Python多线程应用中的卡死问题优化方案指南》在利用Python语言开发某查询软件时,遇到了点击搜索按钮后软件卡死的问题,本文将简单分析一下出现的原因以及对应的优化方案,希望对大家有所帮助... 目录问题描述优化方案1. 网络请求优化2. 多线程架构优化3. 全局异常处理4. 配置管理优化优化效果1.

MySQL中优化CPU使用的详细指南

《MySQL中优化CPU使用的详细指南》优化MySQL的CPU使用可以显著提高数据库的性能和响应时间,本文为大家整理了一些优化CPU使用的方法,大家可以根据需要进行选择... 目录一、优化查询和索引1.1 优化查询语句1.2 创建和优化索引1.3 避免全表扫描二、调整mysql配置参数2.1 调整线程数2.

深入解析Java NIO在高并发场景下的性能优化实践指南

《深入解析JavaNIO在高并发场景下的性能优化实践指南》随着互联网业务不断演进,对高并发、低延时网络服务的需求日益增长,本文将深入解析JavaNIO在高并发场景下的性能优化方法,希望对大家有所帮助... 目录简介一、技术背景与应用场景二、核心原理深入分析2.1 Selector多路复用2.2 Buffer

SpringBoot利用树形结构优化查询速度

《SpringBoot利用树形结构优化查询速度》这篇文章主要为大家详细介绍了SpringBoot利用树形结构优化查询速度,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一个真实的性能灾难传统方案为什么这么慢N+1查询灾难性能测试数据对比核心解决方案:一次查询 + O(n)算法解决

python使用Akshare与Streamlit实现股票估值分析教程(图文代码)

《python使用Akshare与Streamlit实现股票估值分析教程(图文代码)》入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存... 目录一、前言二、核心知识点梳理1、Akshare数据获取2、Pandas数据处理3、Matplotl

小白也能轻松上手! 路由器设置优化指南

《小白也能轻松上手!路由器设置优化指南》在日常生活中,我们常常会遇到WiFi网速慢的问题,这主要受到三个方面的影响,首要原因是WiFi产品的配置优化不合理,其次是硬件性能的不足,以及宽带线路本身的质... 在数字化时代,网络已成为生活必需品,追剧、游戏、办公、学习都离不开稳定高速的网络。但很多人面对新路由器