基于BP神经网络与贝叶斯-最小距离分类器的多模态模式识别系统
项目简介
本项目构建了一个综合性的模式识别与分类分析平台,深入整合了人工神经网络与统计模式识别理论。系统在一个统一的框架下实现了三种经典的分类算法:BP(Back Propagation)神经网络、基于高斯分布假设的贝叶斯分类器以及基于欧氏距离的最小距离分类器。
该系统主要用于演示不同分类算法在非线性不可分问题上的表现差异,通过生成虚拟的三类别高斯分布数据,完整展示了从数据生成、预处理、模型训练、预测评估到可视化分析的全过程。代码完全基于MATLAB原生语言编写,手动实现了BP神经网络的前向与反向传播过程,未依赖深度学习封装工具箱,适合深入理解算法底层逻辑。
功能特性
- 多模型集成:集成了BP神经网络(非线性映射)、贝叶斯分类器(概率统计)、最小距离分类器(几何距离)三种核心算法。
- 全流程数据处理:包含数据的随机生成、Min-Max归一化处理、One-hot编码转换以及训练集/测试集的自动化划分(70%训练,30%测试)。
- 底层算法实现:
*
BP神经网络:手工实现梯度下降、误差反向传播、权重更新以及激活函数逻辑,不依赖黑盒工具箱。
*
贝叶斯分类:基于最大似然估计计算均值与协方差,并在协方差矩阵中引入正则化项以增强数值稳定性。
*
最小距离:计算各类别原型向量,基于欧氏距离进行快速判决。
- 多维性能评估:自动计算各算法在测试集上的准确率,并记录训练耗时,通过控制台输出对比表格。
- 可视化分析平台:生成包含6个子图的综合分析界面,展示原始数据分布、BP训练误差收敛曲线、混淆矩阵以及三种算法的决策边界可视化。
系统要求
- MATLAB R2016b 或更高版本
- Statistics and Machine Learning Toolbox(用于
cvpartition、confusionmat、gscatter 等函数)
使用方法
- 确保MATLAB环境已安装上述工具箱。
- 直接运行主函数脚本。
- 系统将自动清理工作区,生成随机种子固定的模拟数据。
- 程序运行结束后,控制台将打印三种算法的准确率与耗时对比表,并弹出一个名为“多模态模式识别系统分析”的图形窗口展示详细结果。
---
算法实现细节与逻辑分析
本项目的核心逻辑包含在名为 main 的主函数中,以下是各模块的详细实现逻辑分析:
1. 数据集生成与预处理
- 数据合成:使用
randn 函数生成三组服从高斯分布的二维特征数据。每一类样本设置不同的均值中心(如第一类中心在[2, 2],第二类在[-2, 2]等),每类生成200个样本,共600个样本。 - 标签编码:为适应不同算法需求,同时生成了两种标签格式:
* 标量标签(L):1, 2, 3,用于贝叶斯和最小距离分类器。
* One-hot编码(Y):[1 0 0], [0 1 0]...,用于BP神经网络的多输出节点训练。
- 归一化:使用
mapminmax 函数将原始特征数据映射到 [0, 1] 区间,消除量纲影响,加速BP网络收敛。 - 数据集划分:使用
cvpartition 随机保留30%的数据作为独立测试集,其余70%用于训练。
2. BP神经网络实现逻辑
代码并未调用工具箱的
train 函数,而是手动构建了全连接神经网络:
- 网络结构:设定的拓扑结构为
输入层(2节点) -> 隐含层(10节点) -> 输出层(3节点)。 - 前向传播:层与层之间采用全连接加权求和,激活函数统一使用
Sigmoid 函数。 - 反向传播:
* 基于均方误差(MSE)计算损失。
* 利用链式法则推导梯度:计算输出层误差项
d_output 和隐含层误差项
d_hidden。
- 权重更新:使用固定学习率(0.05)的梯度下降法,在2000次的迭代循环中不断修正权重矩阵(W1, W2)和偏置项(B1, B2)。
- 收敛监控:实时记录每次迭代的Loss值,用于后续绘制误差曲线。
3. 贝叶斯分类器实现逻辑
基于多变量高斯分布(Multivariate Gaussian Distribution)假设:
- 参数估计:遍历训练集中的每一类数据,计算其均值向量(
mu)和协方差矩阵(sigma)。 - 正则化处理:在计算协方差矩阵时,添加了微小的对角矩阵正则项(
1e-6 * eye),防止因矩阵奇异导致行列式为0或不可逆的问题。 - 后验概率计算:利用高斯概率密度函数公式计算测试样本属于各类的似然度,结合先验概率(各样本数量占比)得出后验概率。
- 判决:选择后验概率最大的类别作为预测结果。
4. 最小距离分类器实现逻辑
最直观的几何分类方法:
- 原型计算:计算训练集中每一类样本的几何中心(均值向量)作为该类的原型(Prototype)。
- 距离度量:计算测试样本与三个类别原型之间的欧氏距离。
- 判决:将样本归类到距离最近的原型所属类别。
5. 可视化模块
利用MATLAB图形句柄系统构建了 2x3 的子图布局:
- 原始分布:使用
gscatter 展示归一化前的样本分布情况。 - 训练曲线:绘制BP网络训练过程中的MSE Loss下降曲线。
- 混淆矩阵:通过自定义辅助函数
heatmap_custom,以热力图形式展示BP网络在测试集上的分类混淆情况。 - 决策边界:
* 构建覆盖特征空间的密集网格点(meshgrid)。
* 分别将网格点输入到训练好的三个模型中进行预测。
* 使用
contourf 绘制等高线图来模拟决策区域,并叠加测试集样本点,直观展示不同算法对特征空间的划分差异(例如BP能拟合非线性边界,而最小距离通常产生线性或分段线性边界)。