当前位置:   article > 正文

区间预测 | MATLAB实现基于CNN-BiLSTM-Multihead-Attention-KDE多头注意力卷积神经网络结合双向长短期记忆神经网络多变量时间序列区间预测_图注意力 matlab

图注意力 matlab

区间预测 | MATLAB实现CNN-BiLSTM-Multihead-Attention-KDE多头注意力卷积神经网络结合双向长短期记忆神经网络多变量时间序列区间预测

效果一览

在这里插入图片描述

2

3
4
5
6
7

基本介绍

1.Matlab实现基于CNN-BiLSTM-Multihead-Attention-KDE多头注意力卷积神经网络结合双向长短期记忆神经网络多头注意力多变量时间序列区间预测;
2.多图输出、点预测多指标输出(MAE、MAPE、RMSE、MSE、R2),区间预测多指比输出(区间覆盖率PICP、区间平均宽度百分比PINAW),多输入单输出,含点预测图、不同置信区间预测图、误差分析图、核密度估计概率密度图;
区间覆盖率为:0.44848,区间平均宽度百分比为:5.7921
3.data为数据集,功率数据集,用多个关联变量,预测最后一列功率数据,也可适用于负荷预测、风速预测;MainCNN_BiLSTM_MATTN_KDETS为主程序,其余为函数文件,无需运行;
4.代码质量高,注释清楚,含数据预处理部分,处理缺失值,如果为nan,则删除,也含核密度估计;
5.运行环境Matlab2021及以上。

模型描述

  • CNN-BiLSTM-Multihead-Attention-KDE是一种用于处理序列数据的神经网络结构,例如文本或时间序列数据。该结构由四个主要组件组成:
  1. CNN-BiLSTM:该层是一种卷积神经网络,用于处理具有准循环结构的序列数据。它结合了CNN和RNN的优点,既可以实现高效的并行处理,又可以捕捉长期依赖关系。

  2. BiLSTM (双向长短期记忆网络):该层是一种递归神经网络,用于双向处理序列数据。它使网络能够捕捉到正向和反向方向上的依赖关系。

  • 在时间步t处,BiLSTM层的输出,表示为h_t,计算如下:

  • h_t = [h_t^f; h_t^b] = [LSTM^f(x_t); LSTM^b(x_t)]

  • 其中,LSTMf和LSTMb分别是前向和后向LSTM单元,[;]表示连接。

  1. Multihead Attention:该层是一种注意力机制,允许网络有选择地关注输入序列的不同部分。它通过并行计算多个注意力头来实现这一点,每个注意力头关注输入序列的不同部分。
  • 在时间步t处,Multihead Attention层的输出,表示为h_t^*,计算如下:

  • h_t^* = Concat(head_1, head_2, …, head_k) * W^o

  • 其中,k是注意力头的数量,head_i是第i个注意力头,W^o是可学习的参数。每个注意力头计算如下:

  • head_i = Attention(q_i, K, V) = softmax(\frac{q_i K^T}{\sqrt{d_k}}) V

  • 其中,q_i是第i个查询向量,K和V是键和值向量,d_k是键向量的维度。

  1. 输出层:该层将前面的层的输出作为输入,最终输出预测结果,例如分类或回归。
  • 模型的输出,表示为y,计算如下:

  • y = softmax(W^h * h_T^* + b)

  • 其中,h_T^*是Multihead Attention层在最后一个时间步的输出,W^h和b是可学习的参数。softmax函数用于获得可能输出类别的概率分布。

程序设计

  • 完整程序和数据获取方式:私信博主回复MATLAB实现基于CNN-BiLSTM-Multihead-Attention-KDE多头注意力卷积神经网络结合双向长短期记忆神经网络多变量时间序列区间预测
ntrain=round(nwhole*num_size);
	ntest =nwhole-ntrain;
	% 准备输入和输出训练数据
	input_train =input(:,temp(1:ntrain));
	output_train=output(:,temp(1:ntrain));
	% 准备测试数据
	input_test =input(:, temp(ntrain+1:ntrain+ntest));
	output_test=output(:,temp(ntrain+1:ntrain+ntest));
	%% 数据归一化
	method=@mapminmax;
	[inputn_train,inputps]=method(input_train);
	inputn_test=method('apply',input_test,inputps);
	[outputn_train,outputps]=method(output_train);
	outputn_test=method('apply',output_test,outputps);
	% 创建元胞或向量,长度为训练集大小;
	XrTrain = cell(size(inputn_train,2),1);
	YrTrain = zeros(size(outputn_train,2),1);
	for i=1:size(inputn_train,2)
		XrTrain{i,1} = inputn_train(:,i);
		YrTrain(i,1) = outputn_train(:,i);
	end
	% 创建元胞或向量,长度为测试集大小;
	XrTest = cell(size(inputn_test,2),1);
	YrTest = zeros(size(outputn_test,2),1);
	for i=1:size(input_test,2)
		XrTest{i,1} = inputn_test(:,i);
		YrTest(i,1) = outputn_test(:,i);
	end

	%% 创建混合网络架构
%%  区间覆盖率
RangeForm = [T_sim(:, 1), T_sim(:, end)];
Num = 0;

for i = 1 : length(T_train)
    Num = Num +  (T_train(i) >= RangeForm(i, 1) && T_train(i) <= RangeForm(i, 2));
end

picp = Num / length(T_train);     


    S = cumtrapz(X,Y);
    Index = find(abs(m-S)<=1e-2);
    Q = X(max(Index));


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

参考资料

[1] https://blog.csdn.net/kjm13182345320/article/details/127931217
[2] https://blog.csdn.net/kjm13182345320/article/details/127418340

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号