matlab 神经网络做回归预测

本文是用 matlab R2014 a 中的神经网络,做的预测小例子。

步骤:

1. 选择神经网络类型

例如, feedforwardnet(hiddenSizes,trainFcn) 参数是层数、训练函数,这是一种前馈网络,用法:

  net = feedforwardnet(10);

特殊的前馈网络:

  • fitting networks (fitnet函数)、 pattern networks(patternnet函数) 用法:

      net =fitnet(10,trainlm); 
    

还有一个变种:

  • cascade forward network(cascadeforwardnet函数),它从输入到每一层都有连接,每一层对following layers都有连接。

可以改变 net.trainParam 的属性,用法:

  net.trainParam.epochs = 50;%迭代次数。 

2. 指定训练算法

4种:

  • Levenberg-Marquardt backpropagation ,对应 trainlm 函数

  • Bayesian regulation backpropagation , 对应 trainbr 函数

  • Scaled conjugate gradient backpropagation ,对应 trainscg 函数

  • Resilient backpropagation ,对应 trainrp 函数

除了在选神经网络类型时就指定训练算法:

net =fitnet(10,trainbr); 

还可以这样指定:

net.trainFcn = 'trainscg';

3. 开始训练

%Xtrain是训练集的属性向量,是转置后的,每1列是一个instance,一行是一个属性。
%Ytrain 是训练集的target属性。
[net,tr] = train(net,Xtrain,Ytrain); 

%用训练的神经网络对训练数据进行预测。
y = net(Xtrain);

4. 误差分析 mse

%计算模型在训练集上的误差。
perf = mse(net,Ytrain,y);

%画出训练集、验证集、测试集的随着迭代次数增加的mse曲线。
plotperform(tr);

5. 下面是一个完整的示例:

首先将你的数据拆分成训练集和测试集,每行是一个实例,每列是其属性,需要转矩阵转置一下,使每列是一个实例。

然后开始下面的过程:

%默认训练算法 选择的是trainlm函数。
net = feedforwardnet(20);

net.trainParam.epochs = 100;

%训练神经网络模型。
[net,tr] = train(net,Xtrain,Ytrain);

%我们用2007-2008年的数据作为训练数据,计算其误差
y = net(Xtrain);
perf = perform(net,y,Ytrain);  %MSE  587.5126 0.02488
MAPE = mean(abs(y-Ytrain)./Ytrain);
clear y perf MAPE;

% 接下来对2009年的测试集,即 Xtest 进行预测
y = net(Xtest);
plotperform(tr);
view(net);
clear perf y;

得到的 y 就是我们预测的值。

你可能感兴趣的:(matlab)