matlab 神经网络模型 用一组数据预测另一组?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab 神经网络模型 用一组数据预测另一组?相关的知识,希望对你有一定的参考价值。
比如一个用麦子A生长三十天的长度数据建一个模型,如何用它来预测另一个生长了20天的麦子B,后十天的生长状况。
参考技术A matlab 神经网络模型是可以 用一组数据预测另一组的。其预测过程是,先训练,后预测。由于没有具体的数据,无法对其操作说明。
matlab BP神经网络预测下一组数据问题
如题,输入p为n行6列,下面代码我仅举例了4行,实际有很多行。
现需要进行matlab使用BP神经网络编程,将以前的所有样本进行训练,预测下一组将出现的6个数据。
实际上就是已知前N组样本,预测下一组样本的数值。
代码如下:
%输入数据
clear;
clc;
p=[23 25 26 27 29 26;
22 24 26 27 25 18;
12 13 15 18 19 22;
16 17 15 18 19 12] %实际p有很多行数据,此处仅列举4行。
[m,n]=size(p);
pn=p(1:m-1,:); %此处将第一行到倒数第二行作为训练样本
pn=pn*0.01; %此处因为知道pn输入所有数介于0到99之间,因此直接乘以0.01进行数据归一。
tn=p(m,:); %最后一行作为验证结果
tn=tn*0.01; %此处因为知道pn输入所有数介于0到99之间,因此直接乘以0.01进行数据归一。
pn=pn';
tn=tn'; %对pn和tn进行转置
net=newff(minmax(pn),[18,6],'tansig','logsig','trainbr'); %建立网络
net.trainParam.show = 50; %多少轮显示一回
net.trainParam.lr = 0.05; %学习速度
net.trainParam.epochs = 800; %最大训练轮数
net.trainParam.goal = 1e-5; %目标函数误差
%开始训练==============
[net,tr]=train(net,pn,tn);
pn=p(2:m,:); %此处将第二行到最后一行作为预测样本 ----------请问此处如何处理,能够达到让pn等于所有的已知样本来作为预测样本输入?????
ppn=pp*0.001;
ppn=ppn';
%网络输出结果=========
ttn=sim(net,ppn);
ttn=ttn'*100; %数据进行转置并还原真实值
运行上述代码后,发现结果如下:
ans =
2.2222e+014
不知道问题出在哪里,为什么不能得到我想要的下一组数据呢?
实际上我只需要训练已知所有样本,预测得到下一组样本即可。
不知代码是否思路正确,或者有更好的思路或建议的话,请高手指点。万分感谢。
这段代码在2008b中会报错,虽然可以排除,但修改后在你的系统上未必兼容,所以最好用和你比较接近的版本来调试分析。 参考技术A -请问此处如何处理,能够达到让pn等于所有的已知样本来作为预测样本输入????
不知道问题出在哪里,为什么不能得到我想要的下一组数据呢?矛盾啊
http://wenku.baidu.com/link?url=5sPeHwbbotF80NS4oh94zeMshhP68JhbRIqTcBeeAfJ9ZnVheg-_W07sq789GvER80S4IieJ8VRjoh7y-txeT1nFpw5Wi4YX9c9PaogxfOS追问
我查了很多资料,一般情况下实例中输入p可以是多个维度,可是输出n一般是1维的,所以我才有此疑问。
追答n完全可以是多维的.
新版newff与旧版newff调用语法对比
比如输入input(6*1000),输出output为(4*1000),那么
旧版定义:net=newff(minmax(input),[14,4],'tansig','purelin','trainlm');
新版定义:net=newff(input,output,14,'tansig','purelin','trainlm');
非常感谢你的回答。
我暂时用的是matlab7,应该是旧版的对吧,所以我现在怎么改都不能得出想要的输出。如果是R2010B的话,是不是可以用新版本了?
另外,我的本意是,如何用历史数据中的n-1个样品,训练得出第n个样品输出,然后通过输入n个样品,仿真得出下一组数据。这个新版本的nweff函数能实现吗?代码如何写?
%% 清空环境变量
clc
clear
%% 训练数据预测数据
input1=rand(768,8);
output1=round(rand(768,1));
data=[input1,output1];
%从1到768间随机排序
k=rand(1,768);
[m,n]=sort(k);
%输入输出数据
input=data(:,1:8);
output =data(:,9);
%随机提取500个样本为训练样本,268个样本为预测样本
input_train=input(n(1:500),:)';
output_train=output(n(1:500),:)';
input_test=input(n(501:768),:)';
output_test=output(n(501:768),:)';
%输入数据归一化
[inputn,inputps]=mapminmax(input_train);
%% BP网络训练
% %初始化网络结构
net=newff(inputn,output_train,10);
net.trainParam.epochs=1000;
net.trainParam.lr=0.1;
net.trainParam.goal=0.0000004;
以上是关于matlab 神经网络模型 用一组数据预测另一组?的主要内容,如果未能解决你的问题,请参考以下文章
matlab bp神经网络 预测模型 代码(详见补充),非常感谢!