BO-NARX贝叶斯优化非线性自回归外生模型股票价格预测,MATLAB代码




1. 研究背景

股票价格预测是金融时间序列分析中的核心问题。由于股价具有非线性、高噪声和非平稳等特征,传统线性模型(如ARIMA)难以充分捕捉其动态规律。非线性自回归外生(NARX)神经网络能够结合历史收盘价的自回归项与外部影响因素(成交量、开高低价),对复杂非线性关系进行建模。为了减少人工调参的主观性和计算成本,引入贝叶斯优化(BO)自动确定最优超参数(滞后阶数、隐藏层大小、正则化系数),从而提升预测精度与模型泛化能力。

2. 主要功能

  • 读取股票日线数据(日期、成交量、开盘价、最高价、最低价、收盘价),按8:2划分训练集与测试集;
  • 将所有特征(成交量、开高低收)进行Z-score标准化(基于训练集均值和标准差);
  • 使用贝叶斯优化搜索最优超参数组合(滞后阶数、隐藏层神经元数、正则化参数);
  • 基于最优超参数训练最终NARX神经网络模型;
  • 在测试集上预测收盘价,并计算MSE、RMSE、MAE、MAPE四个误差指标;
  • 绘制实际值与预测值对比曲线及残差图。

3. 算法步骤

  1. 数据预处理

    • 导入PriceData.xlsx,提取各列特征;
    • 计算训练集的均值与标准差,对全部数据进行标准化;
    • 按80%比例划分训练/测试集。
  2. 贝叶斯优化超参数

    • 定义优化变量:lag∈[1,10]整数、hiddenSize∈[5,30]整数、lambda∈[1e-5,1e-1]对数变换;
    • 目标函数:在训练集内再划分20%作为验证集,构造NARX设计矩阵(包含收盘价滞后及外生变量滞后),训练前馈神经网络,返回验证集上的均方误差(MSE);
    • 执行30次优化评估,采用期望改进(EI)采集函数,记录最小验证MSE对应的超参数。
  3. 最终模型训练

    • 使用全部训练数据,以最优超参数构建神经网络(Levenberg-Marquardt训练,90%训练/10%验证,早停轮数15);
    • 得到训练好的网络模型。
  4. 测试集预测与评估

    • 基于训练集尾部数据构造测试样本的滞后特征;
    • 将预测值反标准化还原为真实价格尺度;
    • 计算误差指标并绘图。

4. 技术路线

  • NARX模型 :将收盘价的lag阶滞后值以及外生变量(成交量、开盘价、最高价、最低价)的lag阶滞后值共同作为输入,当前时刻收盘价作为输出,由单隐层前馈神经网络逼近非线性映射。
  • 贝叶斯优化:以高斯过程为代理模型,利用采集函数平衡探索与开发,高效寻找使验证损失最小的超参数组合。
  • 正则化 :在训练损失中加入lambda * (权重平方和),抑制过拟合。
  • 数据标准化:消除量纲差异,加速神经网络收敛。

5. 公式原理

  • 标准化

xnorm=x−μtrainσtrain x_{\text{norm}} = \frac{x - \mu_{\text{train}}}{\sigma_{\text{train}}} xnorm=σtrainx−μtrain

  • NARX 模型
    y(t)=f(y(t−1),...,y(t−d),  x1(t−1),...,xm(t−d)) y(t) = f\big( y(t-1), \dots, y(t-d),\; x_1(t-1), \dots, x_m(t-d) \big) y(t)=f(y(t−1),...,y(t−d),x1(t−1),...,xm(t−d))

    其中 y(t)y(t)y(t) 为收盘价,x1,...,xmx_1,\dots,x_mx1,...,xm为外生变量(成交量、开高低价),ddd为滞后阶数,fff由单隐层神经网络实现。

  • 损失函数(含正则化)
    L=1N∑i=1N(yi−y^i)2+λ∑jwj2 L = \frac{1}{N}\sum_{i=1}^{N}(y_i - \hat{y}i)^2 + \lambda \sum{j} w_j^2 L=N1i=1∑N(yi−y^i)2+λj∑wj2

  • 贝叶斯优化

    最大化采集函数 α(θ)=Emax⁡(0,fmin⁡−f(θ))\alpha(\theta) = \mathbb{E}\\max(0, f_{\\min} - f(\\theta))α(θ)=Emax(0,fmin−f(θ))(期望改进),其中 f(θ)f(\theta)f(θ) 为验证MSE,fmin⁡f_{\min}fmin 为当前最优值。

6. 参数设定

参数类别 取值/范围 说明
训练/测试划分 80% / 20%
滞后阶数 1, 10 整数 贝叶斯优化搜索空间
隐藏层大小 5, 30 整数 贝叶斯优化搜索空间
正则化系数 λ 1e-5, 1e-1 对数变换 贝叶斯优化搜索空间
训练算法 trainlm (Levenberg-Marquardt)
最大迭代轮数 200(优化中)/ 300(最终模型)
早停耐心值 10(优化中)/ 15(最终模型)
贝叶斯优化评估次数 30
随机种子 2024 保证可重复性

7. 运行环境

  • 软件 :MATLAB(需包含以下工具箱)
    • 神经网络工具箱(fitnet, train
    • 统计与机器学习工具箱(bayesopt 及相关函数)
    • MATLAB 基本环境(readtable, plot 等)
  • 输入数据PriceData.xlsx 文件,包含工作表 PriceData,列顺序为 Dates, Volume, Open, High, Low, Close。
  • 输出:命令行打印最佳超参数与测试集误差,并显示预测对比图、残差图。

8. 应用场景

  • 金融时间序列预测:对个股或指数的收盘价进行短期预测,辅助投资决策。
  • 量化交易策略:将预测值作为交易信号(例如当预测上涨幅度超过阈值时触发买入)。
  • 风险管理:预测未来价格波动区间,用于设置止损或仓位调整。
  • 学术研究:作为非线性时间序列建模的基准方法,验证贝叶斯优化在金融预测中的有效性。

注:上述分析基于提供的MATLAB代码与Excel数据文件,代码已成功运行并输出最佳超参数(lag=7, hiddenSize=21, λ=0.0033)及测试集MAPE=2.12%。

相关推荐
程高兴5 小时前
PMSM基于在线转动惯量辩识的滑模负载转矩观测器MATLAB-SIMULINK仿真模型
开发语言·matlab
2zcode1 天前
项目文档:基于MATLAB低采样率ISAR成像的快速稀疏重建算法研究
开发语言·算法·matlab
AI科技星1 天前
全域三极公理统一篇——所有分析、代数、拓扑、算子理论同源归一,回归0/1/∞创世本源闭环《全域数学vs传统数学:人类文明进阶200讲》第91讲
人工智能·线性代数·机器学习·数据挖掘·回归·乖乖数学·全域数学
matlab代码2 天前
Matlab基于主成分分析PCA人脸识别系统(GUI界面)【源码44期】
开发语言·matlab·人脸识别
AI科技星2 天前
线性算子不是空间映射函数,是全域双螺旋场之间拉伸、旋转、耦合、坍缩的跨空间标准化变换载体《全域数学vs传统数学:人类文明进阶200讲》第80讲
线性代数·算法·矩阵·数据挖掘·回归·乖乖数学·全域数学
茗创科技2 天前
CGE连接组:用基因表达解码脑疾病的异质性(附高分文献下载)
python·matlab·脑网络
机器学习之心3 天前
基于GA-CNN-LSTM的多输出回归预测与SHAP可解释性分析
回归·cnn·lstm
王莎莎-MinerU3 天前
解析回归集:RAG 和 Agent 上线前,先把表格、公式、版面测清楚
人工智能·算法·数据挖掘·回归·pdf·ocr
糯米导航3 天前
AI 视觉回归实战:截图对比不是“找不同”,如何让智能差异分析真正服务 UI 质量
人工智能·ui·回归
EW Frontier4 天前
GRAIL-SCML:一种几何正则化自适应集成似然的波达方向估计算法【附MATLAB代码】
matlab·自适应·宽带·doa估计·波达方向估计·几何正则化·窄带