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

网友投稿 735 2022-08-30

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

【开盘指数预测】基于matlab遗传算法优化小波神经网络股票开盘指数预测【含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

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

end bestchrom=C_x(I,:); % Wjk=bestchrom(1:inputnumhiddennum); b=bestchrom(inputnumhiddennum+1:inputnumhiddennum+hiddennum); a=bestchrom(inputnumhiddennum+hiddennum+1:inputnumhiddennum+hiddennum+hiddennum); Wij=bestchrom(inputnumhiddennum+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:hiddennum for k=1:inputnum net(j)=net(j)+Wjk(j,k)*x(k); net_ab(j)=(net(j)-b(j))/a(j); end temp=mymorlet(net_ab(j)); for k=1:outputnum y=y+Wij(k,j)*temp; %小波函数 end end

三、运行结果

四、matlab版本及参考文献

1 matlab版本 2014a

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

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:如何在 Ubuntu/Linux 和 Windows 之间共享文件夹
下一篇:Mysql复制方式(半同步复制,并行复制,多源复制)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~