项目说明:基于极限学习机的回归拟合及分类对比实验研究系统
这是一个基于MATLAB开发的综合性实验系统,旨在深入研究并直观展示极限学习机(Extreme Learning Machine, ELM)算法的核心原理及其在回归拟合与分类识别任务中的性能。
本项目通过构建ELM的通用数学模型,实现了从数据生成、模型训练、预测评估到可视化分析的全流程自动化。系统不仅实现了ELM算法,还内置了与传统BP神经网络的对比实验,以及不同激活函数和隐含层节点数的敏感性分析模块。
功能特性
- ELM核心算法实现:基于单隐含层前馈神经网络(SLFN)架构,实现了随机权值初始化与基于Moore-Penrose广义逆的输出权重解析求解,完全避免了迭代微调过程。
- 非线性回归拟合:针对复杂非线性函数能够进行高精度拟合,支持实时绘制真实曲线、训练样本分布及预测曲线。
- 多类别分类识别:支持多维特征输入的多分类任务,采用One-Hot编码处理标签,并提供混淆矩阵分析。
- 算法性能对比:内置简单的BP神经网络模型,能够从训练耗时、均方误差(MSE)和决定系数(R2)三个维度与ELM进行直观对比。
- 参数敏感性分析:自动运行批量实验,评估Sigmoid、Sin、Hardlim、RBF等不同激活函数在不同隐含层规模下的性能表现。
- 全方位可视化:实验结果以多子图形式呈现,包括拟合曲线图、误差条形图、耗时对比图、散点分类图、混淆矩阵热力图及参数趋势图。
系统要求
- MATLAB R2016b 或更高版本
- 不需要特定工具箱(核心算法使用基础矩阵运算实现,部分绘图功能依赖基础绘图库)
使用方法
直接运行 main 函数即可启动全流程实验。系统将依次执行以下三个主要实验模块,并在每个模块结束后弹出相应的可视化窗口:
- ELM回归拟合实验:展示非线性函数的拟合效果及与BP网络的对比。
- ELM分类识别实验:展示三分类问题的预测准确率及混淆矩阵。
- 参数对比实验:展示不同激活函数和节点数对MSE及训练时间的影响。
详细功能与实现逻辑
本项目代码(main.m)主要包含主控流程和核心算法函数,具体实现逻辑如下:
1. ELM 核心算法实现
系统包含一个通用的训练函数 elm_train 和预测函数 elm_predict。
- 权重初始化:输入层权重和偏置在区间 [-1, 1] 内随机生成。
- 隐含层计算:通过矩阵乘法计算临时输出,并根据选定的激活函数(支持 Sigmoid, Sine, Hardlim, Tribas, RBF)进行非线性映射。
* *特别说明*:对于 RBF核,代码中采用了一种简化的欧氏距离计算方式,将随机生成的输入权重视为中心点进行映射。
- 输出层求解:利用 MATLAB 的 pinv 函数计算隐含层输出矩阵 H 的伪逆,通过 $beta = H^{dagger}T$ 解析计算输出层权重,确保了极快的训练速度。
2. 实验一:非线性回归拟合
该模块旨在验证模型对连续函数的逼近能力。
- 数据构造:生成函数 $y = x cdot sin(x) + cos(x)$ 在区间 [-10, 10] 上的样本,并叠加幅度为 0.5 的高斯噪声。
- 数据集划分:随机打乱数据,按照 70% 训练集、30% 测试集的比例进行划分。
- 模型对比:
* 建立一个包含 50 个隐含节点的 ELM 模型(使用 Sigmoid 激活函数)。
* 建立一个具有相同隐含层规模的传统 BP 神经网络,设定迭代次数为 1000 次,学习率为 0.01。
* 计算并输出两种模型的训练耗时、MSE 和 R2。
* 绘制包含四个子图的对比界面:原始数据分布、测试集拟合曲线对比、训练耗时对比柱状图、MSE 误差对比柱状图。
3. 实验二:多类别分类识别
该模块模拟多分类任务,验证模型的分类边界判定能力。
- 数据构造:生成包含 3 个类别的二维模拟数据,每类 150 个样本,数据分布呈现为不同中心的高斯簇。
- 标签编码:对类别标签进行 One-Hot 独热编码处理(例如类别 1 对应 [1, 0, 0])。
- 模型训练:使用包含 100 个隐含节点的 ELM 模型,激活函数选用 Hardlim(硬极限函数),以适应分类任务的离散特性。
- 评估与绘图:
* 将预测输出的最大值索引还原为类别标签。
* 计算分类准确率(Accuracy)。
* 绘制包含两个子图的结果界面:原始数据的二维散点分布图、带有数值标注的混淆矩阵热力图。
4. 实验三:参数敏感性分析
该模块探究超参数对模型性能的影响。
- 实验设计:设定双重循环,遍历四种不同的激活函数(sig, sin, radbas, hardlim)以及四种不同的隐含层节点规模(10, 50, 100, 200)。
- 自动测试:针对每种组合重新训练回归模型,记录其在测试集上的 MSE 和训练耗时。
- 结果汇总:
* 在控制台打印格式化的性能对比表格。
* 绘制两个趋势折线图:展示不同激活函数下,随着节点数增加,模型误差(MSE)的变化趋势以及训练时间的增长情况。
5. 其他辅助功能
- 可复现性:代码开头固定了随机数种子(rng(42)),确保每次运行产生的数据集初始权重和实验结果完全一致。
- 异常处理:核心算法中包含了对样本数小于节点数时的鲁棒性处理(尽管在预设实验中未触发)。