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%。

相关推荐
gihigo19988 分钟前
MATLAB实现光谱特征波长提取
开发语言·matlab
fie888940 分钟前
matlab打靶法求解两点边值优化问题
开发语言·算法·matlab
hoiii1871 小时前
基于MATLAB实现Lamb波频散曲线求解
开发语言·matlab
yu85939582 小时前
MATLAB 分支定界法(Branch and Bound)实现
开发语言·matlab
ZHW_AI课题组4 小时前
基于XGBoost的鸢尾花花瓣长度回归预测
人工智能·数据挖掘·回归
SuperHeroWu74 小时前
【算法】逻辑回归虽然名字中有“回归“,但通常用于二分类任务。如何理解学习?
算法·回归·逻辑回归·二分类任务
吃好睡好便好4 小时前
矩阵秩的计算
人工智能·学习·线性代数·算法·机器学习·matlab·矩阵
listhi5205 小时前
基于雅克比迭代法的方腔流动 MATLAB 实现
开发语言·matlab
机器学习之心5 小时前
基于LSTM-Attention的轴承剩余寿命预测:从振动信号到RUL的端到端MATLAB实现
人工智能·matlab·lstm·轴承剩余寿命预测
kaikaile19955 小时前
平面桁架 Matlab 刚度矩阵计算程序
matlab·平面·矩阵