声明:文章是从本人公众号中复制而来,因此,想最新最快了解各类智能优化算法及其改进的朋友,可关注我的公众号:强盛机器学习,不定期会有很多免费代码分享~
目录
原理简介
数据介绍
结果展示
完整代码
今天给小伙伴带来一期利用Matlab实现Transformer预测的代码。以往Transformer等模型只能在Python中实现,但是Python需要配置环境,且不同版本差异较大,难以直接在电脑上运行,非常不适合新手小白。同时,部分Python代码非常混乱,使用的库也不统一,真假难辨。
相比于传统LSTM、GRU等模型,Transformer模型也更加新颖,容易受到审稿人的喜爱。因此,本期推出Matlab版本的Transformer预测模型,代码非常清晰易懂,也跟以前的形式一样,直接Excel替换数据即可!无需更改代码!
原理简介
Transformer是2017年由Google团队针对机器翻译任务所提出来的模型,它没有采用卷积神经网络或者循环神经网络的结构,而是一个完全基于自注意力机制的模型,主要结构为位置编码、编码器、解码器和前馈网络。其优势就是高度并行化提高计算效率,可以捕获长时间依赖关系,更好地解决长时依赖问题。
Transformer主要由3个部分组成:位置嵌入模块、多头注意力模块和前馈网络模块。为增强长序列中的位置信息,需引入位置嵌入机制,位置编码方程定义为:
式中d为节点负荷的嵌入大小,i为第i个时间步长。自注意力网络的输入需加入位置编码变量:
式中:Et∈R^T×d表示单个节点负荷信息。随后使用线性变换矩阵Wq,Wk,Wv计算Q,K,V,即:
式中:Q和K为查询向量和键向量,用于计算数据间的相关度,V是表征历史数据的值向量。
Transformer的多头注意力机制可突出特征向量间的重点特征,注意力计算公式为:
式中:d为模型维度;h为注意力头数。
数据介绍
本期推文采用的案例数据是2022年1月份的某地光伏功率数据,是一个典型的多变量时间序列数据集。
特征包括气温, 方位角, 云层不透明度, 露点温度, DHI, DNI, GHI, GTI, GTI, 大气可降水量, 相对湿度, 降雪深度, 地面气压, 高度10m风向, 高度10m风速, 天顶角,输出即为实际功率一列。
这边已经帮小伙伴们完成了所有的数据预处理工作,包括缺失值处理、重复值处理等等。同时,由于光伏白天不发电,因此作者已经把功率为0的行都删除了!
更换自己的数据时,只需最后一列放想要预测的列,其余列放特征即可,无需更改代码,非常方便!
结果展示
设置最大训练次数为200次,初始学习率为0.001,最大位置编码长度为256,自注意力机制中的头数为4,每个头的键的通道数为4*32,利用上文2022年1月的光伏功率数据集进行光伏功率预测,得到的结果如下所示:
测试集预测效果图:
训练集预测效果图:
网络结构图:
回归拟合图:
误差直方图:
预测结果显示:
可以看到,Transformer在该光伏功率数据集上的预测精度还是不错的,R2达到了0.999,如果再做几个对比模型,那么文章不就蹭蹭发了吗~
以上结果展示中所有图片,作者都已精心整理过代码,都可以一键运行main直接出图!不信的话可以看下面文件夹截图,非常清晰明了!
适用平台:Matlab2023b及以上,没有的文件夹里已经免费提供安装包,直接下载即可!
完整代码
点击下方小卡片,再后台回复关键字,不区分大小写:
Transformer
其他更多需求或想要的代码,均可点击下方小卡片后,再后台私信,看到后会秒回~