数学建模提分算法——神经网络算法

神经网络算法,对于预测分析具有很好的效果,此外,该算法能够较快的得出结果,适合多种不同场合使用,倘若运用在数学建模之上,更是能加一波大分。

x=[5452.1
5848.1
6212
6775.5
7539.4
8115.9
9278
10070.3
10813.1
11355.5
11670
12393
13556
14808
16540
19105.8
22033.1
25002.6
28657.3
32815.5
34957.6
37146.5
42071.6
47130.2
49875.5
54316.4
57944.6
58105.8
]';
% 该脚本用来做NAR神经网络预测
% 作者:Macer程
lag=5;    % 自回归阶数
iinput=x; % x为原始序列(行向量)
n=length(iinput);

%准备输入和输出数据
inputs=zeros(lag,n-lag);
for i=1:n-lag
    inputs(:,i)=iinput(i:i+lag-1)';
end
targets=x(lag+1:end);

%创建网络
hiddenLayerSize = 13; %隐藏层神经元个数
net = fitnet(hiddenLayerSize);

% 避免过拟合,划分训练,测试和验证数据的比例
net.divideParam.trainRatio = 81.8/100;
net.divideParam.valRatio = 9.1/100;
net.divideParam.testRatio = 9.1/100;

%训练网络
[net,tr] = train(net,inputs,targets);
%% 根据图表判断拟合好坏
yn=net(inputs);
errors=targets-yn;
figure, ploterrcorr(errors)                      %绘制误差的自相关情况(20lags)
figure, parcorr(errors)                          %绘制偏相关情况
%[h,pValue,stat,cValue]= lbqtest(errors)         %Ljung-Box Q检验(20lags)
figure,plotresponse(con2seq(targets),con2seq(yn)) %看预测的趋势与原趋势
%figure, ploterrhist(errors)                      %误差直方图
%figure, plotperform(tr)                          %误差下降线


%% 下面预测往后预测几个时间段
fn=5;  %预测步数为fn。

f_in=iinput(n-lag+1:end)';
f_out=zeros(1,fn);  %预测输出
% 多步预测时,用下面的循环将网络输出重新输入
for i=1:fn
    f_out(i)=net(f_in);
    f_in=[f_in(2:end);f_out(i)];
end
% 画出预测图
figure,plot(1:55,iinput,'b',50:55,[iinput(end),f_out],'r')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ACanary

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值