基于小波神经网络的股票板块指数预测系统
项目简介
本项目是一个基于MATLAB开发的股票板块指数预测系统,核心算法采用小波神经网络(Wavelet Neural Network, WNN)。针对金融时间序列数据非线性、非平稳和高噪声的特点,系统结合了小波变换的时频局部化优势与神经网络的自适应学习能力。项目包含完整的数据模拟生成、小波去噪预处理、小波神经网络构建、动量梯度下降训练以及多维度的预测结果评估与可视化模块。
功能特性
- 仿真数据生成:能够生成包含长期趋势、季节性周期波动和高频随机噪声的仿真股票指数数据,用于模拟真实市场环境。
- 小波去噪处理:利用离散小波变换(DWT)将非平稳序列分解,通过软阈值算法有效去除高频噪声,保留市场主要趋势。
- 自适应小波神经网络:构建了以Morlet小波为激活函数的神经网络,不仅调整权重,还动态调整小波基函数的伸缩因子和平移因子。
- 动量梯度下降算法:手动实现了带有动量项(Momentum)的反向传播(BP)算法,有效避免陷入局部最优并加快收敛速度。
- 多指标量化评估:提供MSE、RMSE、MAPE等多项统计指标,精准量化模型的预测性能。
- 可视化分析:具备训练误差收敛曲线及预测结果对比图,直观展示模型训练过程与预测效果。
系统要求
- MATLAB R2018b 或更高版本
- Wavelet Toolbox(小波工具箱)
- Deep Learning Toolbox / Neural Network Toolbox(主要用于数据归一化函数
mapminmax)
代码实现逻辑详解
本项目代码采用单一脚本流程化执行,主要包含以下核心逻辑步骤:
1. 数据准备(仿真生成)
由于系统设计为独立运行,代码首先构建了一个包含2000个时间步的仿真数据集。数据构造逻辑如下:
- 线性趋势项:模拟板块指数的长期增长或下跌趋势。
- 周期波动项:利用正弦和余弦函数模拟长短周期的市场波动。
- 随机噪声项:叠加高斯白噪声以模拟市场的不确定性。
最终合成原始的收盘价序列,并进行初步可视化展示。
2. 数据预处理与小波去噪
为提高预测精度,系统在进入神经网络前对数据进行了清洗:
- 小波分解:使用
db4(Daubechies 4)小波基函数,对原始序列进行3层离散小波分解,得到近似系数和各层细节系数。 - 阈值计算:计算细节系数的噪声方差,利用通用阈值公式生成自适应阈值。
- 软阈值去噪:对高频细节系数进行软阈值处理,去除微小波动(噪声),保留大幅波动(信号特征)。
- 重构:利用处理后的系数重构出平滑的时间序列。
3. 数据集构建与归一化
- 归一化:使用
mapminmax 函数将去噪后的数据映射到 [0, 1] 区间,加速网络收敛。 - 滑动窗口采样:采用时间窗策略构建监督学习样本。设定输入层维度为10(利用过去10天数据),输出层维度为1(预测第11天数据)。
- 集合划分:将构建好的样本集按8:2的比例划分为训练集和测试集。
4. 小波神经网络(WNN)模型架构
代码手动构建了一个三层WNN模型,而非调用现成工具箱函数,便于深度定制:
- 网络结构:输入层(10节点) -> 隐含层(12节点) -> 输出层(1节点)。
- 激活函数:隐含层采用 Morlet小波函数,其数学表达式为 $cos(1.75t) cdot e^{-0.5t^2}$。该函数具备良好的时频特性。
- 可训练参数:
*
w: 输入层到隐含层的连接权重。
*
v: 隐含层到输出层的连接权重。
*
a: 小波函数的伸缩因子(Dilation),控制小波的频带宽度。
*
b: 小波函数的平移因子(Translation),控制小波在时间轴的位置。
所有参数均进行随机初始化,其中伸缩因子
a 初始化时避免为0。
5. 模型训练(动量BP算法)
训练过程采用基于梯度的反向传播算法,并引入动量项:
- 前向传播:计算隐含层净输入,经过Morlet激活函数处理,再通过线性输出层得到预测值。
- 误差计算:计算预测值与真实标签的误差。
- 梯度计算:根据链式法则,推导了损失函数相对于
v, w, b, a 四组参数的偏导数。代码中详细实现了Morlet函数的导数计算逻辑。 - 参数更新:使用带有动量因子(Momentum = 0.5)的更新公式调整参数。动量项利用上一次的权重变化量来平滑梯度方向,防止震荡。
- 收敛监控:记录每一轮(Epoch)的均方误差(MSE),当误差低于设定阈值或达到最大迭代次数时停止训练。
6. 预测与评估
- 模型预测:利用训练好的参数
w, v, a, b 对测试集数据进行前向传播预测。 - 反归一化:将预测结果从
[0, 1] 区间还原至真实的股价量级。 - 指标计算:
*
MSE (均方误差):衡量预测误差的平方均值。
*
RMSE (均方根误差):MSE的平方根,对大误差敏感。
*
MAPE (平均绝对百分比误差):衡量预测偏差的相对比例。
7. 结果可视化
代码最后生成可视化的图表以辅助分析:
- 训练误差曲线:使用半对数坐标系绘制Loss随Epoch变化的曲线,展示训练收敛情况。
- 预测结果对比图:在同一坐标轴下绘制原始含噪数据、训练集真实值、测试集真实值以及WNN模型的预测值,直观对比模型对趋势的拟合能力。
使用方法
- 确保MATLAB环境已安装必要工具箱。
- 直接运行主脚本。
- 程序将依次输出:
* 数据生成与去噪的进度提示。
* 数据集划分信息。
* 每隔50轮的训练误差日志。
* 最终的测试集评估指标(MSE, RMSE, MAPE)。
- 程序运行结束后,将弹出包含原始数据、误差收敛曲线及预测对比结果的图形窗口。