基于MATLAB的RBF神经网络分类与回归预测通用系统
项目简介
本项目实现了一个基于径向基函数(RBF, Radial Basis Function)神经网络的通用计算平台。该系统集成了完整的算法流程,包括数据生成、预处理、网络构建、混合学习训练、预测推理以及结果可视化。
系统设计旨在展示RBF网络在函数逼近(回归)和模式识别(分类)两大领域的强大能力。与传统的BP神经网络不同,本项目采用混合学习策略:利用K-Means聚类确定隐含层中心,利用线性最小二乘法求解输出权重,从而实现了极快的训练速度和优良的全局逼近性能。
所有核心算法模块(包括高斯核计算、距离矩阵计算、权重求解)均在脚本内部独立实现,逻辑清晰,非常适合用于神经网络原理学习、算法研究及二次开发。
功能特性
- 双模式支持:同一套架构同时支持连续数值回归预测和多类别模式识别任务。
- 混合学习算法:
*
非监督学习阶段:采用K-Means聚类算法自适应确定径向基函数的中心点,或在缺乏工具箱支持时自动降级为随机选取策略。
*
监督学习阶段:使用带正则项的线性最小二乘法(Ridge Regression)快速解析求解输出层权重,避免了迭代训练的耗时问题。
- 鲁棒的数据处理:内置Min-Max归一化预处理流程,确保网络对不同量纲的数据具有良好的适应性。
- 自适应宽度策略:基于中心点间的距离自动计算高斯函数的扩展常数(Spread/Sigma),减少人工调参难度。
- 详细的性能评估:
*
回归:计算均方误差(MSE)和决定系数(R²)。
*
分类:计算准确率(Accuracy)并生成详细的混淆矩阵。
- 丰富的可视化:自动生成拟合曲线对比图、误差分布图、分类决策边界散点图以及热力图形式的混淆矩阵。
核心算法与实现逻辑
本项目在一个主脚本文件中完整实现了以下逻辑流程:
1. 网络架构设计
系统采用典型的三层前馈神经网络结构:
- 输入层:接收归一化后的特征向量。
- 隐藏层:使用高斯函数(Gaussian Function)作为激活函数。隐藏层节点数通过代码参数灵活配置,每个节点代表数据空间中的一个局部响应中心。
- 输出层:执行简单的线性加权组合,输出最终的预测值或分类得分。
2. 训练机制 (rbf_train)
训练过程被封装在内部函数中,具体步骤如下:
- 中心点选取 (Centers):尝试调用K-Means算法寻找数据分布的聚类中心,若环境不支持则自动采用随机样本采样作为中心。
- 宽度参数确定 (Sigma):计算中心点之间的最大距离,结合节点数量和用户设定的spread系数,利用启发式公式计算统一的基函数宽度。
- 格林矩阵计算 (Green's Matrix):计算所有训练样本与所有中心点的高斯响应值,构建隐含层输出矩阵 H。
- 权重求解 (Weights):通过求解线性方程组 $W = (H^T H + lambda I)^{-1} H^T Y$ 获得输出权重。其中引入了微小的正则化参数 $lambda$ (1e-5),有效防止过拟合和矩阵奇异问题。
3. 预测机制 (rbf_predict)
- 输入测试数据后,复用训练阶段确定的中心点和宽度参数计算隐含层响应,再与训练好的权重矩阵相乘得到输出。
- 对于分类任务,输出层采用One-Hot编码逆变换,取最大响应值对应的索引作为预测类别。
演示案例说明
案例一:非线性函数回归
- 数据来源:模拟复杂的非线性函数 $y = sin(x) + 0.5sin(4x) + text{噪声}$。
- 数据划分:70% 用于训练,30% 用于测试。
- 网络配置:使用20个隐藏层神经元(即20个聚类中心)。
- 可视化结果:
* 对比真实函数曲线与RBF预测曲线,展示网络的拟合能力。
* 绘制测试样本的预测误差茎叶图,直观展示每个样本的残差。
案例二:多类别模式识别
- 数据来源:生成3组呈高斯分布的二维特征数据,分别位于不同象限。
- 数据处理:对标签进行One-Hot编码(例如类别1转换为[1, 0, 0])。
- 网络配置:使用15个隐藏层神经元,Spread系数设为0.5以捕捉精细边界。
- 可视化结果:
*
决策边界:在二维平面上绘制测试样本,并重点标记预测错误的样本点。
*
混淆矩阵:以热力图形式展示真实类别与预测类别的对应关系,并在格点中显示具体样本数量。
使用方法
- 环境准备:
* 需要安装 MATLAB 软件。
* 推荐安装 Statistics and Machine Learning Toolbox(用于K-Means聚类),但非必须(系统包含自动回退机制)。
- 运行程序:
* 直接运行主脚本文件。
* 程序将依次执行回归演示和分类演示。
- 结果观察:
* 控制台(Command Window)将输出训练过程中的MSE误差、分类准确率等统计信息。
* 系统将弹出两个独立的图形窗口,分别展示回归和分类的详细图表。
注意事项
- 代码中设置了随机种子 (
rng(42)),以确保每次运行结果的一致性和可复现性。 - 若应用于自己的数据集,只需替换数据生成部分的代码,保持
train_x, train_y 等变量的数据结构即可(行/列方向请参考代码中的转置操作注释)。 rbf_train 函数中的 spread 参数和神经元数量 hidden_neurons 是影响模型性能的关键超参数,针对不同数据可能需要适当调整。