网络上看到很多机器学习预测的代码,各种各样的排列组合,什么TCN,CNN,LSTM,BILSTM,GRU,BiGRU,Attention机制,然后又是什么CNN-LSTM,CNN-BILSTM,CNN-BiGRU……等等等等。
今天作者要推出一个机器学习预测全家桶。
具体包含以下:
单模型预测
BiGRU,BiLSTM,CNN,GRU,LSSVM,LSTM,多元回归函数regress,TCN,SVM
组合模型预测
CNN-BiGRU,CNN-BiGRU-ATTENTION,CNN-BiLSTM,CNN-BiLSTM-ATTENTION,CNN-GRU,CNN-LSSVM,CNN-LSTM,CNN-SVM。
以及结合VMD的几个代码:VMD-CNNBiLSTM,VMD-CNNGRU,VMD-CNNLSTM。其实当你学会了其中一个,其他的照虎画猫也就都出来了。
代码获取方式放在文末了哈!
以上只是比较常用的几个,后续大家有需要的直接后台留言,我会继续在这个全家桶里边更新!
承诺该全家桶永久更新!
后续考虑继续将上述模型全部变为多步预测模型,以及会添加比较传统的各种神经网络(BP,RBF,PNN,KNN等等),极限学习机,随机森林等等方法。
数据准备
数据集统一采用新疆某地风电发电功率数据。
数据包含特征如下:测风塔10m风速(m/s) 、测风塔30m风速(m/s) 、测风塔50m风速(m/s) 、测风塔70m风速(m/s)、 轮毂高度风速(m/s) 、测风塔10m风向(°) 、测风塔30m风向(°) 、测风塔50m风向(°) 、测风塔70m风向(°)、 轮毂高度风向(°) 、温度(°) 、气压(hPa)、 湿度(%) 实际发电功率(mw)。部分数据截图如下:
选取3月份数据,每个样本组成为:延时步长为10,跨时间步长为1。也就是采用前10个样本的所有特征,去预测下一个样本的发电功率。
以表格中数据为例,以2019年1月1日0点~2019年1月1日2点的所有数据(包括功率)组合起来放一块并变成一行,然后把2点15的数据也组合到这一行,这就形成了第一个样本。最后一列是2点15的功率。就这样以此类推,得到好多好多样本。然后划分训练集和测试集就ok了。
结果展示
每种方法的精度不一致,与自身的参数有关。对于这个风电数据来说,每个方法的效果都差不多。
一般去调整,“隐含层节点个数,学习率,训练次数,正则化参数”。调整这几个参数,就完全够用了。现在结合一些智能优化算法优化这些机器学习预测的,也无非就是调整一下这几个参数而已。
这里的参数,作者只是调了个大概,不至于很差。对于精度差的,并不代表这个方法就不好!大家可以调整参数已达到更好的效果!
分为单个模型预测,和组合模型预测进行介绍:
每个模型跑完之后,都会有一个训练集效果对比图,一个预测集效果对比图,和一个误差曲线图,并在命令窗口打印5种指标。
由于篇幅原因,只放前三个方法的预测结果图了,其他的模型都只放指标。
单个模型预测结果:
BiGRU:
CNN:
BiLSTM:
GRU:
LSSVM:
LSTM:
SVM:
TCN:
多元函数回归:REGRESS
组合模型预测:
CNN-BiGRU
CNN-BiGRU-ATTENTION
CNN-BiLSTM:
CNN-BiLSTM-ATTENTION
CNNGRU:
CNN-LSSVM:
CNN-LSTM
cnn-svm:
VMD-CNN-BiLSTM:
这里简单聊一下这个VMD-CNN-BILSTM,其实就是将数据的最后一列,功率那一列,提前进行了VMD分解,变成了K个IMF分量,然后分别用这k个IMF分量构建K个预测模型,然后将k个结果相加,就是最终的预测值。
VMD组合模型还包含了VMD的分解图,频谱图,包络谱绘制等:
VMD-CNN-GRU:
VMD-CNN-LSTM:
最后考虑到大家可能会做算法对比,代码随机选取了四个模型的测试结果进行对比,对比结果图如下:
以上所有图片,代码均可实现!
注意,此代码包含了自注意力机制(selfAttentionLayer),该函数只有2023及以上版本的matlab才有,因此请小伙伴自行下载2023版本的matlab,下载链接一并打包在代码中了。
点击下方卡片获取更多代码!