小弟最近需要用BP做点预测,所以找到了这里
但是还是不是很会用
学些了这个帖子
提供一个Matlab的BP神经网络的基础资料(继续)
晕死还不能给链接
按照这个帖子中给出的教学程序研究了懂了点皮毛
弄了点数据结果运行还是不正确
??? Error using ==> dividevec at 52
P and T have different numbers of columns.
Error in ==> Untitled at 59
[trainSamples,validateSamples,testSamples] = dividevec(normInput,normTarget,validatePercent,testPercent);
是因为09.a的matlab没有dividevec这个函数吗?help里确实也没找到
自己照着改了下数据的程序
clc
clear
p=[1.6 70 30 60;1.6 70 30 80;1.6 70 30 100;...
1.6 70 60 60;1.6 70 60 80;1.6 70 60 100;...
1.6 70 90 60;1.6 70 90 80;1.6 70 90 100;...
1.6 90 30 60;1.6 90 30 80;1.6 90 30 100;...
1.6 90 60 60;1.6 90 60 80;1.6 90 60 100;...
1.6 90 90 60;1.6 90 90 80;1.6 90 90 100;...
1.6 120 30 60;1.6 120 30 80;1.6 120 30 100;...
1.6 120 60 60;1.6 120 60 80;1.6 120 60 100;...
1.6 120 90 60;1.6 120 90 80;1.6 120 90 100;...
1.9 70 30 60;1.9 70 30 80;1.9 70 30 100;...
1.9 70 60 60;1.9 70 60 80;1.9 70 60 100;...
1.9 70 90 60;1.9 70 90 80;1.9 70 90 100;...
1.9 90 30 60;1.9 90 30 80;1.9 90 30 100;...
1.9 90 60 60;1.9 90 60 80;1.9 90 60 100;...
1.9 90 90 60;1.9 90 90 80;1.9 90 90 100;...
1.9 120 30 60;1.9 120 30 80;1.9 120 30 100;...
1.9 120 60 60;1.9 120 60 80;1.9 120 60 100;...
1.9 120 90 60;1.9 120 90 80;1.9 120 90 100;...
2.2 70 30 60;2.9 70 30 80;2.9 70 30 100;...
2.2 70 60 60;2.2 70 60 80;2.2 70 60 100;...
2.2 70 90 60;2.2 70 90 80;2.2 70 90 100;...
2.2 90 30 60;2.2 90 30 80;2.2 90 30 100;...
2.2 90 60 60;2.2 90 60 80;2.2 90 60 100;...
2.2 90 90 60;2.2 90 90 80;2.2 90 90 100;...
2.2 120 30 60;2.2 120 30 80;2.2 120 30 100;...
2.2 120 60 60;2.2 120 60 80;2.2 120 60 100;...
2.2 120 90 60;2.2 120 90 80;2.2 120 90 100];%输入数据,共81组,每组4个输入
t=[0.4768 0.4319 0.3912 0.6017 0.5768 0.5529 0.7314 0.7213 0.7069...
0.8657 0.8812 0.8764 0.9647 0.9586 0.9489 1.1294 1.0871 1.0742...
1.0723 0.9873 0.9947 1.3846 1.2954 1.2877 1.3416 1.3217 1.3008...
0.4013 0.3847 0.3642 0.5347 0.5043 0.4928 0.5736 0.5674 0.5689...
0.8014 0.7862 0.7472 1.0847 0.9096 0.7923 0.9366 0.8947 0.7142...
1.1342 0.9647 0.9165 1.3365 1.2438 1.2147 1.3863 1.2617 1.1926...
0.3692 0.3374 0.2881 0.5278 0.4812 0.4142 0.6379 0.5143 0.4038...
0.9038 0.8142 0.7109 1.0365 0.8876 0.8237 1.0206 0.9143 0.8842...
1.0433 0.9312 0.8742 1.2860 1.1794 1.1069 1.2556 1.2035 1.1847];%输出数据,共81组,每组1个输出
[normInput,ps] = mapminmax(p);
[normTarget,ts] = mapminmax(t);
testPercent = 0.20; % Adjust as desired
validatePercent = 0.20; % Adust as desired
[trainSamples,validateSamples,testSamples] = dividevec(normInput,normTarget,validatePercent,testPercent);
NodeNum1 = 20; % 隐层第一层节点数
TypeNum = 1; % 输出维数
net=newff(minmax(normInput),[NodeNum1,TypeNum],{TF1 TF2},'traingdx');%创建三层BP网络
net.trainfcn='traingdm';
[net,tr] = train(net,trainSamples.P,trainSamples.T,[],[],validateSamples,testSamples);
[normTrainOutput,Pf,Af,E,trainPerf] = sim(net,trainSamples.P,[],[],trainSamples.T);%正常输入的9组p数据,BP得到的结果t
[normValidateOutput,Pf,Af,E,validatePerf] = sim(net,validateSamples.P,[],[],validateSamples.T);%用作变量3的数据p,BP得到的结果t
[normTestOutput,Pf,Af,E,testPerf] = sim(net,testSamples.P,[],[],testSamples.T);%用作测试的3组数据p,BP得到的结果t
%---------------------------------------------------
% 仿真后结果数据反归一化,如果需要预测,只需将预测的数据P填入
% 将获得预测结果t
%---------------------------------------------------
trainOutput = mapminmax('reverse',normTrainOutput,ts);%正常输入的9组p数据,BP得到的归一化后的结果t
trainInsect = mapminmax('reverse',trainSamples.T,ts);%正常输入的9组数据t
validateOutput = mapminmax('reverse',normValidateOutput,ts);%用作变量3的数据p,BP得到的归一化的结果t
validateInsect = mapminmax('reverse',validateSamples.T,ts);%用作变量3的数据t
testOutput = mapminmax('reverse',normTestOutput,ts);%用作变量3组数据p,BP得到的归一化的结果t
testInsect = mapminmax('reverse',testSamples.T,ts);%用作变量3组数据t
figure
plot(1:81,[trainOutput validateOutput],'b-',1:12,[trainInsect validateInsect],'g--',13:15,testOutput,'m*',13:15,testInsect,'ro');
title('o为真实值,*为预测值')
xlabel('试验编号');
ylabel('抗拉强度');
有几个问题
1.这样的数据会不会可以用BP,小弟看本专业中用BP的数据都是变量,没有这样重复的
2.预测阶段,怎么做呢?是将程序中的reverse修改为需要预测的数据吗/
3.那个反向的误差修正这个程序是怎么实现的?
4.训练、预测、绘图的语句也看不懂?是版本的问题吗/
下载资料都是需要金币的,新人很少学起来也很慢,想找个热心人帮忙完成这个程序
如果又需要的话可以给与帮我完成程序的人一个8无的QQ。