GA-BP

%% 程序说明
% 主程序:ga_bp.m
% 适应度函数:gabpEval.m
% 编解码子函数:gadecod.m
% 使用前需安装gaot工具箱,上述三个文件需放在同一文件夹中且将该文件夹
% 设置为当前工作路径
% 运行程序时只需运行主程序ga_bp.m即可
% 此程序仅为示例,针对其他的问题,只需将数据修改即可,但需注意变量名
% 保持一致,尤其是全局变量修改时(在gadecod.m和gabpEval.m中也要修改)
% 版权归MATLAB中文论坛所有,转载请注明
%% 清除环境变量
杀夫
clear all
clc
warning off
nntwarn off
%% 声明全局变量
global p    % 训练集输入数据
global t    % 训练集输出数据
global R    % 输入神经元个数
global S2    % 输出神经元个数
global S1    % 隐层神经元个数硝酸铯
global S    % 编码长度
S1=12;
%% 导入数据
% 训练数据
DAY=xlsread('1.xlsx',1);
day=DAY';
day=day(:,2:end);
% 输入和输出样本
[m1,n1]=size(day);
%%%%%随机打乱矩阵的列,相当于随机进行样本排序nl变量长度,randperm(n1)产生长度为n的随机数列
day=day(:,randperm(n1));
A=day(m1,1:n1);
C=day(1:m1-1,1:n1);
%% 数据归一化
学院
[A1,ps] = mapminmax(A);
[A1,ps]=mapminmax(A,ps);
[C1,ps1] = mapminmax(C);
[C1,ps1]=mapminmax(C,ps1);
% 数据归一化
p=C1;
t=A1;
% 测试数据
k=xlsread('2.xlsx',1);
K=k';
K=K(:,2:end);
[m,n]=size(K);
%%%%%随机打乱矩阵的列,相当于随机进行样本排序numel(x)获得变量长度,randperm(n)产生长度为n的随机数列
K=K(:,randperm(n));
k1=K(1:m-1,1:n);
k2=K(m,1:n);
% 数据归一化
[kn,ps1]= mapminmax(k1,ps1);
%% BP神经网络
% 网络创建
net=newff(minmax(p),[S1,1],{'tansig','purelin'},'trainlm'); %%%S1为隐藏层的层数,7为输出层的层数,tansig为训练隐藏层数据的函数,purelin为训练输出层数据的函数
% 设置训练参数
% 网络训练
[net,tr]=train(net,p,t);
%BP仿真测试1 训练集精度
s_bp1=sim(net,p);    % BP神经网络的仿真结果
sbp1=mapminmax('reverse',s_bp1,ps)
echo off
% E_bp1=s_bp1-t;
汪建设% M_bp1=sse(E_bp1)
% N_bp1=mse(E_bp1)
%BP 仿真测试2  预测集精度
s_bp2=sim(net,kn);    % BP神经网络的仿真结果
sbp2=mapminmax('reverse',s_bp2,ps)
echo off
% E_bp2=s_bp2-t;
% M_bp2=sse(E_bp2)
% N_bp2=mse(E_bp2)
%% GA-BP神经网络
R=size(p,1);
S2=size(t,1);
S=R*S1+S1*S2+S1+S2;
aa=ones(S,1)*[-1,1];
popu=50;  % 种规模
initPpp=initializega(popu,aa,'gabpEval');  % 初始化种
gen=100;  % 遗传代数
% 调用GAOT工具箱,其中目标函数定义为gabpEval
%%%x为运行过程中发现的最佳解决方案,endpop最后的人,bPop最佳人口,trace遗传算法每一代最好的单元矩阵
[x,endPop,bPop,trace]=ga(aa,'gabpEval',[],initPpp,[1
e-6 1 1],'maxGenTerm',gen,...
'normGeomSelect',[0.09],['arithXover'],[2],'nonUnifMutation',[2 gen 3]);
% 绘均方误差变化曲线
figure(1)
plot(trace(:,1),1./trace(:,3),'r-');
hold on
plot(trace(:,1),1./trace(:,2),'b-');
xlabel('Generation');%%%%每一代
ylabel('Sum-Squared Error');%%%%误差平方和
% 绘制适应度函数变化
杜磊
figure(2)
plot(trace(:,1),trace(:,3),'r-');
hold on
plot(trace(:,1),trace(:,2),'b-');
xlabel('Generation');
阎健宏ylabel('Fittness');%%%%身体素质
% 计算最优的权值和阈值
[W1,B1,W2,B2,val]=gadecod(x);
net.IW{1,1}=W1;
net.LW{2,1}=W2;
net.b{1}=B1;
net.b{2}=B2;
% 利用新的权值和阈值进行训练
net=train(net,p,t);
%% GA_BP仿真测试1  训练集精度
s_ga1=sim(net,p);    % BP神经网络的仿真结果
sga1=mapminmax('reverse',s_ga1,ps)
echo off
% E_ga1=s_ga1-t;
% M_ga1=sse(E_ga1)
% N_ga1=mse(E_ga1)
% GA_BP仿真测试    预测集精度
s_ga2=sim(net,kn);    %遗传优化后的仿真结果
sga2=mapminmax('reverse',s_ga2,ps)
echo off
% E_ga2=s_ga2-t;
% M_ga2=sse(E_ga2)
% N_ga2=mse(E_ga2)\
%%%%%将训练集和测试集的实际值和预测值输出到一个矩阵
BP1(1:n1,1)=A';BP1(1:n1,2)=sbp1';BP1(1:n,3)=k2';BP1(1:n,4)=sbp2';
GABP1(1:n1,1)=A';GABP1(1:n1,2)=sga1';GABP1(1:n,3)=k2';GABP1(1:n,4)=sga2';
%%%%%加入表头
% BP=dataset({BP1,'train','train_prediction','test','test_prediction'});
% GABP=dataset({GABP1,'train','train_prediction','test','test_prediction'});
xlswrite('BP.xlsx',BP1)
xlswrite('GA-BP.xlsx',GABP1)

本文发布于:2024-09-23 06:33:27,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/257860.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:训练   数据   函数
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议