基于BP算法的小波神经网络预测模型
项目介绍
本项目实现了一种将小波分析理论与误差反向传播(BP)算法深度融合的小波神经网络(Wavelet Neural Network, WNN)。该模型通过结合小波变换在时频域的局域化特性与神经网络的自学习能力,特别适用于非线性系统的识别与时间序列预测。与传统神经网络不同,本模型采用Morlet小波函数作为隐含层的激活函数,能够更精准地捕捉信号的局部非平稳特征。
功能特性
- 非线性拟合能力:专门针对复杂的非线性函数(如三角函数复合运算)进行建模和逼近。
- Morlet小波激活:使用Morlet母小波函数取代传统的Sigmoid函数,增强了网络对信号局部变化的敏感度。
- 参数自适应调节:通过BP算法更新网络权值、小波伸缩因子以及平移因子。
- 自定义数据处理:内置完整的数据归一化、应用归一化、反归一化模块,无需依赖外部库。
- 多维度评价指标:自动计算平均绝对误差(MAE)、均方误差(MSE)以及均方根误差(RMSE)。
- 可视化分析:实时生成训练误差收敛曲线及测试集预测值与真实值的对比图。
系统要求
- MATLAB R2016a 或更高版本
- 无需安装额外的工具箱,代码采用原生语法实现
算法实现逻辑
程序的运行逻辑遵循以下标准流程:
- 数据生成与划分:通过非线性函数 $y = sin(x) + cos(x^2)$ 构造实验样本。数据集按80%和20%的比例划分为训练集与测试集,以验证模型的泛化能力。
- 数据预处理:手动实现归一化逻辑,将输入和输出数据映射到 [0, 1] 区间。这一过程通过记录原始数据的最大值和最小值,确保测试集能以相同的尺度进行转换。
- 网络结构初始化:模型采用单输入-多隐含层节点-单输出的结构。初始状态下,隐含层到输出层的权值、小波伸缩因子(Scale)以及平移因子(Translation)均采用正态分布随机初始化。
- BP训练循环:
*
前向传播:计算输入值在每个隐含层节点上的小波响应,计算公式涉及平移和缩放操作。
*
误差计算:计算预测值与真实值之间的均方误差。
*
反向传播:基于链式法则推导Morlet小波对各参数的偏导数,利用梯度下降法逐一更新权值、伸缩因子和平移因子。
- 预测与恢复:将测试集输入通过训练好的网络,并将输出结果进行反归一化处理,恢复至原始数据量级。
- 结果导出:在命令行窗口输出评估精度,并绘图直观展示预测效果。
关键函数与实现细节分析
- Morlet小波函数:在代码中体现为 $exp(-t^2/2) cdot cos(1.75t)$。该函数的选择使得网络在处理具有突变特征的非线性信号时具有更好的收敛速度。
- 参数迭代更新:代码不仅更新了传统的神经元连接权值,还将小波函数的形态参数(a和b)纳入学习范畴。通过 $da$(伸缩因子梯度)和 $db$(平移因子梯度)的计算,实现了小波基函数在时频平面上的自适应位置调整。
- 梯度推导细节:在反向传播过程中,程序显式计算了 Morlet 函数的导数:$d_phi_dt = exp(-t^2/2) cdot (-t cdot cos(1.75t) - 1.75 cdot sin(1.75t))$,这是保证参数更新准确性的核心数学基础。
- 收敛终止条件:程序设置了最大迭代次数(1000次)和误差目标值(1e-5)双重阈值。当训练误差达到目标精度时,会自动提前跳出循环。
- 自定义辅助模块:
*
归一化模块:实现了最小-最大标准化。
*
反归一化模块:利用训练时保存的统计参数(ps.min, ps.max)将预测值还原。
使用方法
- 启动 MATLAB 软件。
- 确保当前工作路径包含项目的所有核心逻辑。
- 在命令行窗口输入主程序的运行指令或直接点击运行按钮。
- 等待程序完成1000次迭代(或提前收敛)。
- 在弹出的图形窗口中观察训练曲线和预测精度,同时在命令行查看具体误差数值。