MATLAB贝叶斯优化混合Bayes-CNN-RNN分析股票市场数据与浅层网络超参数优化

news/2024/11/30 2:45:04/文章来源:https://www.cnblogs.com/tecdat/p/18568984

全文链接:https://tecdat.cn/?p=38354

原文出处:拓端数据部落公众号

本文旨在介绍一种利用贝叶斯优化方法来优化混合 CNN - RNN 和浅层网络超参数的简单方法,并展示了如何使贝叶斯优化器考虑离散值。通过对股票市场数据的模拟与分析,阐述了网络构建、数据预处理、超参数优化以及结果可视化等过程,探讨了股票市场预测这一具有挑战性任务中机器学习方法的应用与局限性。

引言

“我能计算天体的运动,却无法计算人类的疯狂。”
——艾萨克·牛顿爵士,在 1720 年春天被问及南海股票时所言。
如今,像我这样的数学家、物理学家、机器学习专家、数据科学家以及对数据充满好奇的爱好者们,都梦想着有朝一日能够借助人工智能预测未来。股票市场预测?它既困难又令人失望,同时也充满希望,这正是股票市场的本质所在。支撑时间序列预测基础的假设并不总是适用于股票市场现象。股票市场时间序列是众多受利润诱惑的投资者贪婪、野心、失望与希望的源泉。而这正是我们试图通过机器学习进行预测的内容;这无疑是一项极为艰巨的任务,但如果精心设计网络,就有可能识别出某些模式,并预测出接近未来现实的行为。
“过去的模式或许会在明天重现”。本文将展示一种利用贝叶斯优化来优化混合 CNN - RNN 和浅层网络超参数的简单方法。

关键要点

  • 分别使用贝叶斯优化对混合 CNN - RNN 和浅层网络进行调优。
  • 采用一种简单的方法使贝叶斯优化算法能够包含离散值。
  • 本代码中使用了一种生成类似随机股票市场数据的简单程序。

输入参数

 
  1.  
    clearvars;
  2.  
    delete(gcp('nocreate'));
  3.  
    ratio = 0.9; % 用于划分训练集和测试集数据的比例
  4.  
    MaxEpochs = 600; % 两个网络的最大训练轮数
  5.  
    NetOption = []; % 所使用的网络
 

生成股票价格

生成随机股票市场数据并包含日期信息。

 
  1.  
    % 模拟股票数据
  2.  
    Period = 249 * 2;
  3.  
    data = stockpricesimulation(Period, true);
  4.  
    Past = datetime('today') - Period;
  5.  
    Date = Past:datetime('today');
 

可视化完整序列

首先查看数据总是有益的。

 
  1.  
     
  2.  
    set(gca, 'FontSize', 12, 'FontName', 'Adobe Kaiti Std R', 'FontWeight', 'bold');
  3.  
    set(gca, 'Box', 'on', 'LineWidth', 1, 'Layer', 'top',...
  4.  
    'XMinorTick', 'on', 'YMinorTick', 'on', 'XGrid', 'on', 'YGrid', 'on',...
  5.  
    'TickDir', 'out', 'TickLength', [.015.015],...
  6.  
    'FontName', 'avantgarde', 'FontSize', 12, 'FontWeight', 'normal');
  7.  
    axis tight;
 

划分训练集和测试集序列

对数据进行训练集和测试集的划分。

准备自变量和因变量

浅层网络环境会在内部完成所有数据准备工作,但如果使用 CNN - RNN,则需要在训练网络之前准备序列。

超参数优化

有大量超参数需要调整和优化。NarNet 训练速度极快,所以如果计算机配置一般,此选项是不错的选择,并且仍能获得较好的拟合性能。如果计算机配备了最新一代处理器,则可以尝试使用贝叶斯优化来优化 CNN - RNN 参数。
在 CNN - RNN 优化中,使用了一个“技巧”来强制优化器处理离散值。通过将“MiniBatchSize”声明为分类变量,使其取值为’16’ ‘32’ ‘48’ ‘64’,然后将这些值转换为数值。

 
  1.  
     
  2.  
    % 获取贝叶斯优化的最佳点
  3.  
    optVars = bestPoint(BayesObject);
  4.  
    % 使用最优参数评估和训练网络
  5.  
    [valError, ~, net, Ys, YPred, YPredStep, YTest] = BayesObject.ObjectiveFcn(optVars, true);
  6.  
    % 还原数据标准化
  7.  
    YPredStep = sig * YPredStep + mu;
  8.  
    YTest = sig * YTest + mu;
  9.  
    YPred = sig * YPred + mu;
  10.  
    % 评估网络性能
  11.  
    sMAPErr = sMAPE(con2seq(YTest), con2seq(YPred));
  12.  
    end
 

优化结果如下表所示:

 
  1.  
    optVars = 1×7 table
  2.  
    **learningrate** **performFcn** **mc** **processFcns** **Lag** **hiddenLayerSize1** **hiddenLayerSize2** **\_\_\_\_\_\_\_\_\_\_\_\_** **\_\_\_\_\_\_\_\_\_\_** **\_\_\_\_\_\_\_** **\_\_\_\_\_\_\_\_\_\_\_** **\_\_\_** **\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_** **\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_**
  3.  
    0.0014275 msesparse 0.73025 mapminmax 14 22 11
 

性能函数已替换为均方误差性能。

delete(gcp('nocreate'));

该表展示了贝叶斯优化器找到的最佳参数。

可视化

将完整序列与测试数据和预测数据重叠显示。

 
  1.  
    figure;
  2.  
    plot(Date, data);
  3.  
    hold on;
  4.  
    idx = size(YPred, 2);
  5.  
     
  6.  
    set(gca, 'FontSize', 12, 'FontName', 'Adobe Kaiti Std R', 'FontWeight', 'bold');
  7.  
    set(gca, 'Box', 'on', 'LineWidth', 1.1, 'Layer', 'top',...
  8.  
    'XMinorTick', 'on', 'YMinorTick', 'on', 'XGrid', 'on', 'YGrid', 'on',...
  9.  
    'TickDir', 'in', 'TickLength', [.015.015],...
  10.  
    'FontName', 'avantgarde', 'FontSize', 12, 'FontWeight', 'normal');
  11.  
    axis tight;
 

单独可视化预测数据和测试数据以便更好地理解。

绘制回归图:

预测未观测值

以下是浅层网络闭环预测超出观测值序列的情况。

 
  1.  
    if strcmp(NetOption, 'NarNet')
  2.  
    numTimeStepsTest = size(YTest, 2);
  3.  
    [x1, xio, aio, t] = preparets(net, {}, {}, XTrain);
  4.  
    [y1, xfo, afo] = net(x1, xio, aio);
  5.  
    [netc, xic, aic] = closeloop(net, xfo, afo);
  6.  
    X2 = num2cell(rand(1, numTimeStepsTest));
  7.  
    [YPredStep, xfc, afc] = netc(X2, xic, aic);
  8.  
    YPredStep = cell2mat(YPredStep);
  9.  
    end
 

一些可视化操作来检查网络性能。

绘制回归图:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/841085.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

银河英雄传说

[NOI2002] 银河英雄传说 题目背景 公元 \(5801\) 年,地球居民迁至金牛座 \(\alpha\) 第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展。 宇宙历 \(799\) 年,银河系的两大军事集团在巴米利恩星域爆发战争。泰山压顶集团派宇宙舰队司令莱…

Linux系统进程

系统进程 【1】、进程基本概述 当我们运行一个程序,那么我们将运行的程序叫进程 ​ PS1:当程序运行为进程后,系统会为该进程分配内存,以及进程运行的身份和权限 ​ PS2:在进程运行的过程中,服务器上会有各种状态来表示当前进程的指标信息 程序和进程的区别 ​ 程序是数…

桌面软件识别截图区域识别实例

first :1、使用pyautogui截图+拼接 2、使用lackey 截图+识别import pyautogui """整凭截图""" im1 = pyautogui.screenshot() im2 = pyautogui.screenshot(my_screenshot.png) """区域截图""" import pyautogui…

WEB攻防-XSS跨站CSP策略HttpOnly属性Filter过滤器标签闭合事件触发

1.CSP(Content Security Policy 内容安全策略) 内容安全策略是一种可信白名单机制,来限制网站中是否可以包含某来源内容。 该制度明确告诉客户端,哪些外部资源可以加载和执行,等同于提供白名单, 它的实现和执行全部由浏览器完成,开发者只需提供配置。 禁止加载外域代码,防…

ThreeJs-03材质进阶

一.uv贴图 在3D计算机图形学中,UV映射是一种将2D纹理映射到3D模型表面的方法。在这里,“U”和“V”代表了2D纹理空间的坐标,这与2D笛卡尔坐标系统中的“X”和“Y”是类似的。在3D模型的每个顶点上,都会有一组对应的UV坐标,它们定义了3D模型在这个顶点上的表面应当对应纹理…

超参数调整、Batch归一化和程序框架

超参数调整、Batch归一化和程序框架 超参数调整在深度学习中,有许多超参数需要调整,不同超参数的重要性有所不同,可分为以下优先级: 第一优先级是学习率 \(\alpha\) 。 第二优先级是动量梯度下降参数 \(\beta\) ,隐藏层神经元数量,以及mini-batch大小。 第三个优先级是隐…

数据采集与融合技术实践作业4

102202143 梁锦盛 1.东方财富网信息爬取 使用Selenium框架+ MySQL数据库存储技术路线爬取“沪深A股”、“上证A股”、“深证A股”3个板块的股票数据信息。 一、作业代码与展示 1.编写代码文件 from selenium import webdriver from selenium.webdriver.common.by import By …

工程管理如何优化?2024年8款进度管理系统分享

本文盘点了8款主流工程项目管理工具:1.Worktile;2.泛普软件;3.子筑云;4.蓝凌;5.智建云;6.Wrike;7.Smartsheet;8.用友U8。工程进度管理系统是确保工程项目按计划顺利进行的关键工具。这类系统通过提供任务调度、资源分配、进度跟踪和实时通讯等功能,帮助项目经理和团队…

Docling:一个用于文档解析和格式转换的 IBM 开源工具

日常接触到的文档格式越发的多,pdf、doc、ppt、html等等,有没有一种方式可以将其转化为统一的格式呢?比如转为markdown或者json格式。 今天推荐一个IBM开源的工具,它可以满足你的需求,它是用python开发的。 下面为具体介绍内容: 项目简介 Docling是一个用于文档解析和格式…

Vulnhub Tr0ll

0x01:端口扫描 主机发现 nmap -sn 192.168.231.0/24IP地址为192.168.231.137 全端口扫描 nmap --min-rate 10000 -p- 192.168.231.137开放了21ftp,22ssh,80http UDP扫描 nmap -sU --min-rate 10000 -p- 192.168.231.137无UDP端口开放 接下来进行详细端口扫描 nmap -sT -sC -…

裁员了,很严重,大家做好准备吧!

在实际工作中,测试人需要解决的是具体的技术问题,而不仅仅是理论知识。为了全面评估候选人的能力,确保招聘到真正适合公司的人才。📝 博主首页 : 「码上生花」 ,同名公众号 :「伤心的辣条」📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MyS…

IDEA如何快速地重写方法,如equals、toString等

前言 大家好,我是小徐啊。我们在使用IDEA的时候,有时候是需要重写equals和toString等方法的。这在IDEA中已经很方便的给我们准备好了快速的操作了。今天就来讲解一下。 如何重写 首先,打开要重写方法的文件,让鼠标定位到这个文件。然后,点击上方的代码,再点击重写方法这个…