%% 清空环境变量
warning off % 关闭报警信息
close all % 关闭开启的图窗
clear % 清空变量
clc % 清空命令行
%% 导入数据(时间序列的单列数据)
result = xlsread('数据集.xlsx');
%% 数据分析
num_samples = length(result); % 样本个数
kim = 8; % 延时步长(kim个历史数据作为自变量)
zim = 1; % 跨zim个时间点进行预测
%% 划分数据集
for i = 1: num_samples - kim - zim + 1
res(i, :) = [reshape(result(i: i + kim - 1), 1, kim), result(i + kim + zim - 1)];
end
%% 数据集分析
outdim = 1; % 最后一列为输出
num_size = 0.7; % 训练集占数据集比例
num_train_s = round(num_size * num_samples); % 训练集样本个数
f_ = size(res, 2) - outdim; % 输入特征维度
%% 划分训练集和测试集
P_train = res(1: num_train_s, 1: f_)';
T_train = res(1: num_train_s, f_ + 1: end)';
M = size(P_train, 2);
P_test = res(num_train_s + 1: end, 1: f_)';
T_test = res(num_train_s + 1: end, f_ + 1: end)';
N = size(P_test, 2);
%% 数据归一化
[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test = mapminmax('apply', P_test, ps_input);
[t_train, ps_output] = mapminmax(T_train, 0, 1);
t_test = mapminmax('apply', T_test, ps_output);
%% 创建网络
save_net = [];
for i = 0.02 : 0.05 : 0.97 % 置信区间范围 0.97 - 0.02 = 0.95
layers = [ ...
sequenceInputLayer(f_, 'name', 'input') % 输入层
gruLayer(10, 'name', 'hidden') % GRU 层,隐藏层节点个数 5
reluLayer % Relu激活层
fullyConnectedLayer(outdim, 'name', 'fullconnect') % 回归层
QRegressionLayer('out', i)];
%% 网络参数设置
options = trainingOptions('adam', ... % Adam梯度下降算法
'MaxEpochs', 300, ... % 最大训练次数 600
'InitialLearnRate', 1e-2, ... % 初始学习率为 0.01
'LearnRateSchedule', 'piecewise', ... % 学习率下降
'LearnRateDropFactor', 0.2, ... % 学习率下降因子 0.2
'LearnRateDropPeriod', 200, ... % 经过 400 次训练后 学习率为 0.01 * 0.2
'Shuffle', 'every-epoch', ... % 训练打乱数据集
'ValidationPatience', Inf, ... % 关闭验证
'Verbose', false);
%% 训练网络
net = trainNetwork(p_train, t_train, layers, options);
%% 保存网络
save_net = [save_net, net];
end
%% 采用不同网络进行预测
for i = 1 : length(save_net)
%% 仿真预测
t_sim1(i, :) = predict(save_net(i), p_train);
t_sim2(i, :) = predict(save_net(i), p_test );
%% 数据反归一化
L_sim1{i} = mapminmax('reverse', t_sim1(i, :), ps_output);
L_sim2{i} = mapminmax('reverse', t_sim2(i, :), ps_output);
t_sim1(i, :) = mapminmax('reverse', t_sim1(i, :), ps_output);
t_sim2(i, :) = mapminmax('reverse', t_sim2(i, :), ps_output);
end
%% 得到预测均值
T_sim1 = mean(t_sim1);
T_sim2 = mean(t_sim2);
%% 性能评估
error1 = sqrt(sum((T_sim1 - T_train) .^2 ) ./ M);
error2 = sqrt(sum((T_sim2 - T_test ) .^2 ) ./ N);
%% 绘图
figure
fill([1 : M, M : -1 : 1], [L_sim1{1}, L_sim1{end}(end : -1 : 1)], ...
'r', 'FaceColor', [1, 0.8, 0.8], 'EdgeColor', 'none')
hold on
plot(1 : M, T_train, 'r-', 1 : M, T_sim1, 'b-', 'LineWidth', 1)
legend('95%的置信区间', '真实值', 'QRGRU预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'训练集预测结果对比'; ['RMSE = ' num2str(error1)]};
title(string)
xlim([1, M])
grid
figure
fill([1 : N, N : -1 : 1], [L_sim2{1}, L_sim2{end}(end : -1 : 1)], ...
'r', 'FaceColor', [1, 0.8, 0.8], 'EdgeColor', 'none')
hold on
plot(1 : N, T_test, 'r-', 1 : N, T_sim2, 'b-', 'LineWidth', 1)
legend('95%的置信区间', '真实值', 'QRGRU预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'测试集预测结果对比'; ['RMSE = ' num2str(error2)]};
title(string)
xlim([1, N])
grid
%% 相关指标计算
% R2
R1 = 1 - norm(T_train - T_sim1)^2 / norm(T_train - mean(T_train))^2;
R2 = 1 - norm(T_test - t_sim2)^2 / norm(T_test - mean(T_test ))^2;
disp(['训练集数据的R2为:', num2str(R1)])
disp(['测试集数据的R2为:', num2str(R2)])
% MAE
mae1 = sum(abs(T_sim1 - T_train)) ./ M ;
mae2 = sum(abs(T_sim2 - T_test)) ./ N ;
disp(['训练集数据的MAE为:', num2str(mae1)])
disp(['测试集数据的MAE为:', num2str(mae2)])
% MBE
mbe1 = sum(T_sim1 - T_train) ./ M ;
mbe2 = sum(T_sim2 - T_test ) ./ N ;
disp(['训练集数据的MBE为:', num2str(mbe1)])
disp(['测试集数据的MBE为:', num2str(mbe2)])
%% 指标计算(区间覆盖率和区间平均宽度百分比)
t_sim1 = t_sim1'; T_train = T_train';
t_sim2 = t_sim2'; T_test = T_test' ;
picp1 = PICP (t_sim1, T_train);
pimw1 = PIMWP(t_sim1, T_train);
disp(['训练集的区间覆盖率为:', num2str(picp1), '。区间平均宽度百分比为:', num2str(pimw1)])
picp2 = PICP (t_sim2, T_test);
pimw2 = PIMWP(t_sim2, T_test);
disp(['测试集的区间覆盖率为:', num2str(picp2), '。区间平均宽度百分比为:', num2str(pimw2)])
没有合适的资源?快使用搜索试试~ 我知道了~
基于分位数回归的门控循环单元QRGRU时间序列区间预测 (主要应用于风速,负荷,功率) 包含评价指标R2,MAE,MBE,区间
共5个文件
m:4个
xlsx:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 90 浏览量
2023-12-26
11:17:15
上传
评论
收藏 26KB ZIP 举报
温馨提示
基于分位数回归的门控循环单元QRGRU时间序列区间预测。(主要应用于风速,负荷,功率) 包含评价指标R2,MAE,MBE,区间覆盖率,区间平均宽度。 基于分位数回归的门控循环单元QRGRU时间序列区间预测。(主要应用于风速,负荷,功率) 包含评价指标R2,MAE,MBE,区间覆盖率,区间平均宽度。
资源推荐
资源详情
资源评论
收起资源包目录
13 QRGRU时序区间.zip (5个子文件)
QRegressionLayer.m 1KB
main.m 5KB
数据集.xlsx 26KB
PICP.m 362B
PIMWP.m 285B
共 5 条
- 1
资源评论
智能算法及其模型预测
- 粉丝: 1847
- 资源: 788
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功