基于贝叶斯优化算法的深度学习LSTM模型时间序列多步预测Matlab程序代码

       利用深度学习进行序列预测时,模型参数的确定是很头疼的问题,因为模型参数的选择对于结果的影响非常大。现在最流行的深度学习模型当属长短期记忆(LSTM)了,它属于卷积神经网络(CNN)的一种改进,具有很多优点,可以避免模型发生梯度消失和梯度爆炸,而且具有长短期记忆的功能。我基于Matlab2021编写了一个BO-LSTM算法,其中BO指的是贝叶斯(Bayesian)算法,利用BO算法对LSTM模型的超参数进行优化选择,包括采取的历史回归长度、隐藏层数、隐藏层单元数、单元随机丢弃率、初始学习率,这样可以解决模型确定的问题。该程序可以直接用于对于时间序列的多步提前预测。为方便理解,我自定义了一个时间序列,然后进行了提前24步预测。可以自己根据需要进行修改,用来预测自己的序列。

       下面简单对程序代码进行一个说明。

       这个是程序运行的结果。结果展示了单步预测(即1步预测)和24步预测的结果。数据为随机生成。若有自己的数据可以读取,然后自行调参。这里横坐标的意义为:<=0的表示历史数据,>0的表示为未来数据。整体效果还是比较好的。

        下面详细分析了24步预测误差结果。包括绝对误差、MAE、RMSE、MAPE。总体来说结果还行,但是这个是因为序列本身具有一定规律。这个结果每次是不一样的,有多种原因,模型训练结果也存在一定离散性,导致结果有所不同。

            模型的训练过程,贝叶斯优化我选取了最大迭代步数为20步,通常默认为30步。下面是迭代过程的目标函数示意图。贝叶斯算法可以根据当前的历史结果,预测下一个最优点的位置,然后确定参数,然后训练,得到结果,再以此往复。

            因为迭代需要20步,我的程序默认选择不显示每次迭代的收敛过程。如果需要看的话可以自己修改程序代码,将'Plots',"none", ...  修改为'Plots',"training-progress", ...  如果开启了查看收敛过程,会出现20个下面这种图。建议第一次运行的时候打开,这样可以看自己的收敛过程是否合理。

        下面简单说明一下程序的实现思路和代码截图。

        1.程序首先新建一个临时文件夹,用于存放贝叶斯优化过程的每次结果,以便优化后进行文件的调取。

        2.创建时间序列数据。如果有真实的数据的话,建议用load或dlmread命令读取数据文件,此处必须保证时间序列变量为行向量。我这里用的是随机信号,省的还要上传数据文件,太麻烦了。这样一个m文件就可以搞定了。

      3.确定要用哪些数据作为测试集,我这里是取了最后24个数据,作为测试集,也就相当于未来的数据。其它数据同时作为训练集和验证集。

注意:有的研究只设置了训练集,然后训练过程尽可能保证训练集的误差小。我觉得这种做法欠妥,很容易陷入过拟合的问题。所以我添加了验证集,训练过程需要查看验证集的误差情况。

      4.设置优化器。确定LSTM模型的哪些参数是可能需要改变的,我这里选择了5种参数,包括采取的历史回归长度、隐藏层数、隐藏层单元数、单元随机丢弃率、初始学习率。可以自己定义参数的范围,这样贝叶斯算法就可以在这些参数范围内进行寻优。最大迭代次数我设置为了20步。

      5.调用自定义的目标函数,利用贝叶斯算法对LSTM模型的超参数进行优化。目标函数的定义如下(仅展示了部分代码)。我觉得这部分是贝叶斯优化的核心,有点类似于遗传算法的适应度计算。

        6.将训练的最优结果对应的超参数进行读取识别,同时读取最优超参数下的训练得到的LSTM模型。

      7.根据最佳超参数,评估训练集和测试集的误差。这一步我是为了保险,如果只是为了预测,这一步可以不要。

      8.进行单步预测和24步预测。我这里同时做了单步和24步预测,实际上我需要的只是24步预测,这个在风电预测里面比较常见。单步预测结果我也计算了,只是为了进行一个对比。现在很多文献都只对比单步预测的结果,我觉得这个是很扯的一件事情。事实上,单步预测我觉得意义并不大,只有对未来若干数据进行预测才有价值。当然这只是我个人的观点。欢迎大家讨论!

      9.误差分析。我这里展示了4种误差的图,这也是最常用的误差评估指标了。

      以上就是全部内容了!程序我只展示了部分,完整的下载链接请点击:基于贝叶斯优化算法的LSTM模型时间序列多步预测Matlab程序代码。(非免费,十几块钱,权当尊重一下劳动吧哈哈)。如果有问题也欢迎留言讨论,或者联系我的邮箱huweicheng92@163.com,我做了一些风速智能预测的研究,如果有能一起合作写文章的也非常欢迎。

————————————————

版权声明:本文为CSDN博主「hwc_yzt」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/weixin_38919810/article/details/124768458

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容