2023年冠豪猪算法优化CNN-GRU-Attention多特征输入多步预测,机器学习预测全家桶,持续更新,MATLAB代码...

今天在机器学习预测全家桶中继续添加关于优化CNN-GRU-Attention模型预测的代码。

本期代码主要功能为:采用冠豪猪算法优化CNN-GRU-Attention模型的四个参数,分别是学习率,卷积核个数,GRU的神经元个数,自注意力机制的键值数。并进行了优化前后的结果比较。

冠豪猪算法是2023年12月份发表的一个智能优化算法,参考文献如下:

Abdel-Basset M, Mohamed R, Abouhawwash M. Crested Porcupine Optimizer: A new nature-inspired metaheuristic[J]. Knowledge-Based Systems, 2023: 111257.

CNN-GRU神经网络模型介绍

CNN网络作为一种前馈式神经网络,一维-CNN(Cov1D)能够提取时间序列组成的数据矩阵的相应特征。本文在此选用窗宽为s的定时间窗以步长1截取数据矩阵,使用双层Conv1D卷积层对所选取矩阵进行特征向量提取,为了更好地克服传统RNN所普遍存在的梯度消失的问题,采用门控循环单元神经网络(GRU)作为处理CNN所得特征向量的点预测算法。GRU是LSTM网络的一个简化变体,属于门控循环神经网络家族。GRU中的更新门是由LSTM网络中的遗忘门和输入门合并而成,模型架构更为简单,在保证模型预测精度的同时减少了计算量和训练时间。LSTM有输出门,遗忘门和输出门,而GRU则只包含更新门和重置门,成少了参数的训练。更新门控制前一时刻的状态信息保留到当前状态中的程度,值越大表示前一时刻的状态信息保留越多。重置门控制当前状态与先前的信息结合的程度,值越小说明忽略的信息越多。

331be79d08a0086259df64d8f85cf3a1.png

有关模型的介绍,本文就不再细讲。具体可以参考文献:

王雅兰,田野,杨丽华.基于DA-CNNGRU混合神经网络的超短期风电场功率预测方法[J].湖北电力,2021,45(03):23-28.DOI:10.19308/j.hep.2021.03.00

CNN-GRU-Attention网络模型搭建

本次搭建的模型如下:

ff36b92d36645bbc1e62e883bf086a42.png

具体的参数变量如下:

325526e5c8f6875056b63f7ea9fc7183.png

数据准备

数据共包含18个特征,一个小时采样一次,一天共24个样本点,采用前一天(24*18)数据特征去预测后一天(24*1)。

e359491668d535e8d1a62dfa121fad9c.png

结果展示

87f611296714b3b6807241ab02b728a7.png

297db3bf4873824189765c9d46ab2064.png

b5556b518e9406772a8a3b47786f5ea1.png

ab5aaf1b06c4efe5790ce65565ffde17.png

3c5558d22e0f1885162b8d3a7634ca68.png

0bb1688e713553fbe05fd6cf5c8990c8.png

可以看到,优化后,CNN-GRU-ATTENTION的预测精度提升了很多!

后台私信获取代码。点击下方卡片获取更多代码!

  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
豪猪优化算法(GWO)是一种基于群体智能的优化算法,用于求解优化问题。支持向量机(SVM)是一种常用的机器学习算法,用于分类和回归任务。下面是使用GWO优化SVM的Matlab代码示例: ```matlab % 导入数据集 load iris_dataset.mat X = irisInputs'; Y = irisTargets'; % 定义SVM参数 C = 1; % 惩罚参数 kernel = 'linear'; % 核函数类型 % 定义适应度函数(SVM分类准确率) fitness = @(w) svm_fitness(w, X, Y, C, kernel); % 定义GWO参数 max_iter = 100; % 最大迭代次数 n = 30; % 狼群大小 % 初始化狼群位置和适应度 positions = rand(n, size(X, 2)); fitness_values = zeros(n, 1); for i = 1:n fitness_values(i) = fitness(positions(i, :)); end % 迭代优化 for iter = 1:max_iter alpha = 2 - iter * (2 / max_iter); % 更新狼的位置参数 a = 2 * alpha * rand(n, size(X, 2)) - alpha; % 更新狼的位置 % 更新狼群位置和适应度 for i = 1:n A = 2 * a(i, :) - 1; C = 2 * rand(size(X, 2)); D = abs(C .* positions(i, :) - X); X1 = positions(i, :) - A .* D; % 边界处理 X1(X1 < 0) = 0; X1(X1 > 1) = 1; fitness_new = fitness(X1); if fitness_new > fitness_values(i) positions(i, :) = X1; fitness_values(i) = fitness_new; end end % 更新全局最优解 [~, idx] = max(fitness_values); global_best = positions(idx, :); % 显示当前迭代结果 disp(['Iteration: ' num2str(iter) ', Best Fitness: ' num2str(fitness_values(idx))]); end % SVM分类器函数 function accuracy = svm_fitness(w, X, Y, C, kernel) svm_model = fitcsvm(X, Y, 'KernelFunction', kernel, 'BoxConstraint', C, 'KernelScale', 'auto'); Y_pred = predict(svm_model, X); accuracy = sum(Y_pred == Y) / numel(Y); end ``` 这段代码使用GWO算法优化SVM的参数,其中包括狼群大小、迭代次数、适应度函数等。在每次迭代中,根据狼的位置更新参数,并计算适应度。最终得到最优解作为SVM的参数,用于分类任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

今天吃饺子

不想刀我的可以选择爱我

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

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

打赏作者

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

抵扣说明:

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

余额充值