首先明确几点:1,神经网络的用处是当我不知道自变量与因变量是什么联系才用的,如果已知是线性或二次可采用其他方式拟合.
2,神经网络相当于一个黑盒子,里面的运算过程是封闭的,也就是得不到关系式(事实上就算得到每个神经元的权值也需要再次逼近,没意义的)。
神经网络的Python包可以采用pybrain,具体参看http://blog.csdn.net/fengsigaoju/article/details/51702527
对于数模的小伙伴们,可以采用以下matlab代码:
x=[1,2,3,4,5];//输入矩阵(一行就是一个变量,如果有n个变量m组数据就是n*m的矩阵,这里是一个变量,5组数据)
y=[2,3,4,5,6];//输出矩阵 (同上,这里是1个输出变量,5组输出数据)
[pn,input_str]=mapminmax(x);//输入数据归一化
[tn,output_str]=mapminmax(y);//输出数据归一化
net=newff(pn,tn,[3,7,2],{'purelin','logsig','purelin'});
net.trainParam.epochs=1000;//最大迭代次数
net.divideFcn='';//如果超过六次迭代没有变化就会停止,用这个命令取消。
net.trainParam.lr=0.05;//学习速度
net=train(net,pn,tn);//开始训练
an=sim(net,pn);
a=mapminmax('reverse',an,output_str);
plot(x,a);//画出当前图形(自变量和因变量)
p=max(x)+1:max(x)+5;(往后预测5个)
pnew=mapminmax('apply',p,input_str);//把准备预测的数据归一化(就是自变量)
anew=sim(net,pnew);
anew=mapminmax('reverse',anew,output_str);//把预测的数据还原会原数量级<pre name="code" class="plain">
如果有多重数据需要拟合或者预测,可以写成函数调用。
function s=ceshi(x,y)%%预测后五周
x=x';//注意输入的如果是列向量要改成行向量
y=y';
[pn,input_str]=mapminmax(x);
[tn,output_str]=mapminmax(y);
net=newff(pn,tn,[3,7,2],{'purelin','logsig','purelin'});
net.trainParam.epochs=1000;
net.divideFcn='';
net.trainParam.lr=0.05;
net=train(net,pn,tn);
an=sim(net,pn);
a=mapminmax('reverse',an,output_str);
plot(x,a);
p=max(x)+1:max(x)+5
pnew=mapminmax('apply',p,input_str);
anew=sim(net,pnew);
anew=mapminmax('reverse',anew,output_str);
s=anew;