📄 neta.m
字号:
%根据测得神经元个数进行网络训练和预测,采用提前终止法训练网络,训练出相关系数较好的网络
%环境初始化
clear
clc
close all
%读取数据,进行变量赋值
%load indata
%indata是训练数据(前R-1行)和测试数据(最后1行)的输入变量和目标输出,按行排列,每行前Q-1个位输入,第Q个为目标输入(预测数据目标输出可以设为0)
indata=[0.4 450 -5 40 12 80 49 0.86 -6 0.02 180 3.5 1;
0.3 138 5 40 3 120 41 0.87 -3 0.03 240 5.6 1;
0.18 1200 -20 30 6 75 43 0.88 -5 0.01 170 3.5 1;
0.5 200 -20 30 12 90 45 0.89 -12 0.02 165 2.7 1;
0.45 400 -20 30 12 60 41 0.87 -4 0.03 170 3.6 1;
0.44 450 -20 30 12 45 41 0.85 -13 0.02 220 3.6 1;
0.4 200 -10 30 6 60 46 0.85 -10 0.01 145 3 1;
0.463 260 -15 25 12 75 40 0.86 -13 0.005 155 4.4 1;
0.44 560 -10 25 12 85 46 0.89 -1 0.03 195 5.5 1;
0.3 300 -5 25 12 75 41 0.87 -14 0.02 180 4.7 1;
0.5 370 -30 30 12 80 45 0.88 -17 0.01 165 3.9 1;
0.3 225 -15 25 12 90 41 0.86 -5 0.01 170 3.8 1;
0.32 365 5 40 24 80 49 0.89 -2 0.03 210 5.5 1;
0.35 200 5 40 12 75 45 0.85 -5 0.04 170 3.5 1;
0.412 350 -25 35 12 75 40 0.91 -5 0.07 270 5.5 0;
0.51 90 0 35 12 80 45 0.87 -13 0.02 165 2.2 0;
0.105 110 0 35 12 95 44 0.88 -4 0.01 185 5.7 0;
0.41 250 -20 30 12 245 44 0.84 -6 0.01 155 4.8 0;
0.156 110 -25 30 12 150 35 0.85 -2 0.02 160 2.9 0;
0.148 70 -25 25 12 140 37 0.84 -11 0.03 190 3.5 0;
0.238 130 -20 25 12 120 33 0.83 -15 0.01 185 6.7 0;
0.268 120 -20 30 12 110 41 0.87 -7 0.02 190 5.4 0;
0.434 140 -20 25 12 65 36 0.88 -8 0.01 170 8.3 0;
0.2322 200 -15 35 12 70 44 0.85 -15 0.02 190 7.1 0;
0.299 130 -20 30 12 70 39 0.85 -10 0.01 185 4.4 0;
0.175 210 5 40 12 55 40 0.86 3 0.01 240 4 0;
0.45 100 -5 30 12 75 35 0.84 -6 0.04 215 2.7 0;
0.425 90 -30 30 12 80 37 0.88 4 0.02 200 3.5 0;
0.517 80 -30 30 12 180 42 0.87 -1 0.01 155 5.1 0;
0.592 110 -30 30 12 110 40 0.85 2 0.02 160 4.4 0;
0.18 140 -20 35 12 40 46 0.88 -21 0.01 185 4.8 0;
0.4 115 -20 30 12 55 46 0.88 -8 0.02 185 4.6 0;
0.1953 260 -5 40 12 60 47 0.89 -18 0.01 190 2.6 0;
0.3 150 0 40 12 95 42 0.85 -15 0.02 185 2.7 0;
0.35 110 -5 30 12 90 39 0.84 -2 0.01 160 4.1 0;
0.47 95 -20 30 12 65 38 0.86 5 0.03 200 5.7 0;];
indata=predepose(indata);
%R是indata行数,Q是indata列数
[R,Q]=size(indata);
%提取输入变量,并转置
p=indata(:,1:Q-1);
%提取目标输入
t=indata(:,Q);
p=p';
t=t';
%预处理数据,对数据进行规范化
[pn,meanp,stdp,tn,meant,stdt] = premnmx(p,t); % prestd(p,t);
% %过滤掉相关数据
% [ptrans,transMat] = prepca(pn,0.001)
% [R,Q] = size(ptrans)
%多次训练,
for j=1:100
% %过滤相关数据时使用
% nu=randperm(Q);
% pn=pn(nu);
% tn=tn(nu);
% iitst = 2:4:Q;
% iival = 4:4:Q;
% iitra = [1:4:Q 3:4:Q];
%不过率相关数据时使用
nu=randperm(36);
iitst = nu(33:36)
iival = nu(31:34);
iitra = nu(1:30);
%训练集
iitr=pn(:,iitra);
iitrtt=tn(:,iitra);
%提前中止集
iiva=pn(:,iival);
iivatt=tn(:,iival);
%测验
iite=pn(:,iitst);
iitett=tn(:,iitst);
%网络结构确认向量
val.P=iiva;
val.T=iivatt;
%网络结构测试向量
test.P=iite;
test.T=iitett;
n=4;
%创建一个BP网,隐含层有n个神经元,传递函数为tansig,输出层有1个神经元,传递函数为logsig,训练函数为trainlm
net = newff(minmax(iitr),[n,1],{'logsig' 'purelin'},'trainlm');
%设置训练步数
net.trainParam.epochs =2000;
%目标误差
net.trainParam.goal=0.001;
%确认失败的最大次数
net.trainParam.max_fail=20;
%最小性能梯度
net.trainParam.min_grad=1e-20;
%Mu初始化值
net.trainParam.mu = 1;
%Mu减因子
net.trainParam.mu_dec = 0.9;
%Mu增因子
net.trainParam.mu_inc = 1.2;
%进行训练
[net,tr]=train(net,iitr,iitrtt,[],[],val,test);
a1=sim(net,iitr);
atr=postmnmx(a1,meant,stdt);%poststd(a1,meant,stdt);
tt1=t(:,iitra);
[m1 b1 r1]=postreg(atr,tt1);
a2=sim(net,iiva);
ava=postmnmx(a2,meant,stdt);%poststd(a2,meant,stdt);
tt2=t(:,iival);
[m2 b2 r2]=postreg(ava,tt2);
a3=sim(net,iite);
ate=postmnmx(a3,meant,stdt);%poststd(a3,meant,stdt);
tt3=t(:,iitst);
[m3 b3 r3]=postreg(tt3,ate);
%相关系数比较好的时候跳出循环
if (r1>=0.9)&(r2>=0.9)&(r3>=0.9)
break
end
end
%最后结果的绘图
close all
figure
[m1 b1 r1]=postreg(atr,tt1);
grid
figure
[m2 b2 r2]=postreg(ava,tt2);
grid
figure
[m3 b3 r3]=postreg(tt3,ate);
grid
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -