%% GRNN神经网络时间序列预测
%% 1.初始化
clear
close all
clc
format bank %2位小数,format short精确4位,format long精确15位
%% 2.读取读取
data0=xlsread('data.xlsx'); % Matlab2021版本以上无法使用xlsread函数,可用Load函数替代
lag=5; %lag代表延迟,即本网络的输入节点数
for i=1:length(data0)-lag
data(i,:)=data0(i:i+lag)';
end
input=data(:,1:end-1);
output=data(:,end);
N=length(output); %计算样本数量
testNum=100; %设定测试集样本数量
trainNum=N-testNum;
%% 3.设置训练集和测试集
input_train = input(1:trainNum,:)'; % 训练集输入
output_train =output(1:trainNum)'; % 训练集输出
input_test =input(trainNum+1:trainNum+testNum,:)'; % 测试集输入
output_test =output(trainNum+1:trainNum+testNum)'; % 测试集输出
%% 4.数据归一化
[inputn,inputps]=mapminmax(input_train,0,1); % 训练集输入归一化到[0,1]之间
[outputn,outputps]=mapminmax(output_train); % 训练集输出归一化到默认区间[-1, 1]
inputn_test=mapminmax('apply',input_test,inputps); % 测试集输入采用和训练集输入相同的归一化方式
%% 5.求解最佳隐含层
inputnum=size(input,2); %size用来求取矩阵的行数和列数,1代表行数,2代表列数
outputnum=size(output,2);
disp(['输入层节点数:',num2str(inputnum),', 输出层节点数:',num2str(outputnum)])
MSE=1e+5; %误差初始化
for desired_spread=0.1:0.1:1
%% 创建GRNN网络
% 扩散因子 desired_spread
% 神经网络
net = newgrnn(inputn,outputn, desired_spread);
an0=sim(net,inputn); %仿真结果
mse0=mse(outputn,an0); %仿真的均方误差
disp(['当扩散因子为',num2str(desired_spread),'时,训练集均方误差为:',num2str(mse0)])
%不断更新最佳的隐含层节点
if mse0<MSE
MSE=mse0;
desired_spread_best=desired_spread;
end
end
disp(['最佳扩散因子为:',num2str(desired_spread_best),',均方误差为:',num2str(MSE)])
%% 6.构建最佳隐含层的GRNN神经网络
net=newgrnn(inputn,outputn, desired_spread_best);
%% 7.网络测试
an=sim(net,inputn_test); % 训练完成的模型进行仿真测试
test_simu=mapminmax('reverse',an,outputps); % 测试结果反归一化
error=test_simu-output_test; % 测试值和真实值的误差
%% 8.结果输出
% 预测值和实际值的对比图
figure
plot(output_test,'b-','linewidth',1)
hold on
plot(test_simu,'r-','linewidth',1)
legend('实际值','预测值')
xlabel('测试样本'),ylabel('指标值')
title('GRNN预测值和实际值的对比')
set(gca,'fontsize',12)
figure
bar(error)
xlabel('测试样本'),ylabel('预测误差')
title('GRNN神经网络测试集的预测误差')
set(gca,'fontsize',12)
figure;
plotregression(output_test,test_simu,['GRNN数据拟合图']);
figure;
ploterrhist(test_simu-output_test,['GRNN误差直方图']);
%计算各项误差参数
[~,len]=size(output_test); % len获取测试样本个数,数值等于testNum,用于求各指标平均值
SSE1=sum(error.^2); % 误差平方和
MAE1=sum(abs(error))/len; % 平均绝对误差
MSE1=error*error'/len; % 均方误差
RMSE1=MSE1^(1/2); % 均方根误差
MAPE1=mean(abs(error./output_test)); % 平均百分比误差
% 显示各指标结果
disp(' ')
disp('各项误差指标结果:')
disp(['误差平方和SSE为:',num2str(SSE1)])
disp(['平均绝对误差MAE为:',num2str(MAE1)])
disp(['均方误差MSE为:',num2str(MSE1)])
disp(['均方根误差RMSE为:',num2str(RMSE1)])
disp(['平均百分比误差MAPE为:',num2str(MAPE1*100),'%'])
disp(['预测准确率为:',num2str(100-MAPE1*100),'%'])
% 工作区中
% output_test代表测试集
% test_simu代表GRNN预测值
% error代表GRNN误差
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于扩散因子搜索的GRNN神经网络时间序列预测(Matlab完整程序和数据) 1.单变量时间序列预测 2.扩散因子循环搜索; 3.GRNN神经网络; 4.时间序列预测; 基于扩散因子搜索的GRNN神经网络时间序列预测(Matlab完整程序和数据) 1.单变量时间序列预测 2.扩散因子循环搜索; 3.GRNN神经网络; 4.时间序列预测。
资源推荐
资源详情
资源评论
收起资源包目录
基于扩散因子搜索的GRNN神经网络时间序列预测.zip (8个子文件)
GRNN时间序列预测
3.png 53KB
main.m 3KB
1.png 41KB
数据.xlsx 31KB
5.png 63KB
4.png 27KB
data.xlsx 20KB
2.png 32KB
共 8 条
- 1
资源评论
机器学习之心
- 粉丝: 1w+
- 资源: 698
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功