⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 neta.m

📁 生物柴油课题的神经网络方法处理
💻 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 + -