查看: 968|回复: 4|关注: 0

[已答复] 使用matlab做神经网络预测遇到问题

[复制链接]

新手

5 麦片

财富积分


050


4

主题

5

帖子

0

最佳答案
发表于 2019-1-23 17:02:15 | 显示全部楼层 |阅读模式
本帖最后由 阿软喂 于 2019-1-23 18:33 编辑

使用的是matlab R2016b,电脑是64位win10操作系统。
已知能源消耗量的影响因素为:人口、GDP、城镇化率、工业GDP占比、能耗强度。
现已知以上影响因素11年的数据(2005-2015年),以及2005-2015年能源消耗量的数据,预测未来多年的能源消耗量
仿照教学视频(径向基神经网络)写的,一直运行不了
x=[294.14,292.66,293.08,293.51,294.13,298.75,270.51,276.92,277.07,277.22,277.83;
    2394,2626.218,2888.8398,3157.501901,3482.724597,3848.41068,4337.158836,4887.978009,5440.319523,5940.82892,6457.681036;
    1.38,1.364,1.298,1.2233,1.1483,0.994,0.9689,0.9353,0.9042,0.8814,0.7572;
    23.91087,25.30087,42.53465,39.42162,33.73966,33.8096,34.68439,45.46365,52.51849,49.14181,49.90456;
    11.24,11.72,12.22,12.73,13.84,23.42,24.43,25.83,27.16,28.77,30.4];
y=[98.53,113.67,119.36,139.56,144.51,153.07,170.36,186.08,199.47,212.35,215.24];

%%划分训练数据与测试数据
%训练输入向量
trainx=x(:,4:11);
%训练样本对应的输出
trainy=y(4:11);

%测试输入向量
testx=x(:,1:3);
%测试样本对应的输出
testy=y(1:3);

%%对训练样本做插值

%训练样本的个数
N=size(trainx,2);
X=[trainx;trainy];

%网格
[xx0,yy0]=meshgrid(1:N,1:4);
[xx1,yy1]=meshgrid(linspace(1,N,100),1:4);

%使用interp2函数做二维三次插值
XX=interp2(xx0,yy0,X,xx1,yy1,'cubic');

%形状复原
trainx=XX(1:3,:);
trainy=XX(4,:);

%%创建网络
%误差容限
er=1e-8;

%扩散因子
spread=22;

%神经元个数
N=101;
net=newrb(trainx,trainy,er,spread,N);
%%测试
yy=net(testx);
%% 计算、显示相对误差
e=(testy-yy)./testy;
fprintf('相对误差:\n');
fprintf('%f  ',e);
fprintf('\n\n');
%平均相对误差
m=mean(abs(e));
fprintf('平均相对误差:\n %f\n',m);

%最大相对误差
ma=max(abs(e));
fprintf('最大相对误差:\n %f\n',ma);

%显示实际值与拟合值
figure(1)
plot(1:3,testy,'bo-')
hold on
plot(1:3,yy,'r*-')
title('能源消耗量测试结果')
legend('真实值','预测值')

%显示残差
figure(2)
plot(1:3,abs(testy-yy),'-o')
title('残差')







MATLAB 基础讨论
版块优秀回答者

入门

174 麦片

财富积分


50500


4

主题

547

帖子

34

最佳答案
  • 关注者: 20
发表于 2019-1-23 23:01:13 | 显示全部楼层
这是个时间序列数据,需要用前几组的数据作为输入,后续一个为输出,这样循环处理。

新手

5 麦片

财富积分


050


4

主题

5

帖子

0

最佳答案
 楼主| 发表于 2019-1-23 23:46:33 | 显示全部楼层
liuzuojun 发表于 2019-1-23 23:01
这是个时间序列数据,需要用前几组的数据作为输入,后续一个为输出,这样循环处理。 ...

啥意思呢?麻烦把程序帮忙改一下呗

MATLAB 基础讨论
版块优秀回答者

入门

174 麦片

财富积分


50500


4

主题

547

帖子

34

最佳答案
  • 关注者: 20
发表于 2019-1-24 10:54:35 | 显示全部楼层
阿软喂 发表于 2019-1-23 23:46
啥意思呢?麻烦把程序帮忙改一下呗

用Elman网络实现,用2005-2014年的数据训练,预测2015年的消耗量,然后用2015年之前的数据预测2016年的,结果如下:
  1. tr_output =

  2.   215.8636


  3. pre_2016 =

  4.   223.9994
复制代码


QQ 1773615041

新手

5 麦片

财富积分


050


0

主题

3

帖子

0

最佳答案
发表于 2019-11-6 17:06:10 | 显示全部楼层
阿软喂 发表于 2019-1-23 23:46
啥意思呢?麻烦把程序帮忙改一下呗

你好,请问该问题你懂了嘛,想请教下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /3 下一条

快速回复 返回顶部 返回列表