MatlabCode

本站所有资源均为高质量资源,各种姿势下载。

您现在的位置是:MatlabCode > 资源下载 > 一般算法 > ELM与改进算法EELM及YELM性能对比平台

ELM与改进算法EELM及YELM性能对比平台

资 源 简 介

本项目是一个基于MATLAB开发的极限学习机(Extreme Learning Machine, ELM)算法研究与对比系统。项目完整集成了当前流行的ELM及ELM_2基础算法,并重点复现了两种高性能的改进算法:发表于《Neural Computing》的EELM(Effective ELM,作者:Yuguang Wang)以及由Yuboyuan提出的YELM(一种改进的ELM)。该系统的核心功能是提供一个统一的实验框架,用于对这三类(标准ELM、EELM、YELM)方法进行严格的性能比对和验证。程序内部封装了各个算法的实现源码,用户通过运行主程序“pendigits_mean”即可自动加载数据、调用各算法模型进行训练与预测,并计算相应的性能指标平均值。该项目适用于机器学习领域中对前馈神经网络快速训练算法的研究,帮助研究人员快速复现论文结果并评估不同ELM变体的实际效果。

详 情 说 明

ELM及其改进算法EELM与YELM性能对比验证平台

项目简介

本项目是一个基于MATLAB开发的极限学习机(Extreme Learning Machine, ELM)算法研究与对比系统。项目完整集成了当前流行的ELM基础算法,并重点复现了两种高性能的改进算法:发表于《Neural Computing》的EELM(Effective ELM)以及改进型YELM。该系统的核心功能是提供一个统一的实验框架,能够在完全相同的实验条件下(相同的数据输入、隐层节点数、激活函数等),对标准ELM、EELM、YELM三种方法进行严格的性能比对和验证。

为了确保代码的即插即用性,本项目内置了基于高斯混合模型的Pendigits模拟数据集生成器,用户无需下载外部数据即可直接运行并观察算法效果。

主要功能特性

  • 多算法集成对比:整合了标准ELM、EELM(基于权重优化)和YELM(基于正则化)三种核心算法。
  • 内置模拟数据生成:集成了Pendigits模拟数据集生成模块,能够自动生成具有16维特征、10个类别的高斯分布簇数据,并包含噪声模拟。
  • 自动化实验流程:支持一键运行多次独立实验(默认为10次),自动计算算法的准确率均值、标准差以及训练/测试耗时。
  • 可视化分析:提供直观的结果展示,包括分类准确率的箱线图(Boxplot)和平均耗时的柱状图对比。
  • 数据预处理封装:内置数据归一化(MapMinMax)和标签One-Hot编码处理功能。

系统要求与使用方法

系统要求

  • MATLAB R2016a 或更高版本(需包含统计与机器学习工具箱,用于基础绘图和统计函数)。
  • 无需安装任何第三方工具箱,所有核心算法均为原生MATLAB代码实现。

使用方法

  1. 确保MATLAB当前工作目录为项目所在文件夹。
  2. 直接运行主函数。
  3. 程序将自动执行以下步骤:
* 生成模拟数据。 * 对三种算法进行多次循环测试。 * 在命令窗口输出每次运行的详细指标。 * 实验结束后弹窗显示性能对比图表。

核心算法实现细节与分析

本项目中的main.m脚本不仅仅是调用工具箱,而是从底层通过矩阵运算实现了算法的核心逻辑。以下是各算法在代码中的具体实现分析:

1. 标准极限学习机 (Standard ELM)

  • 实现逻辑
* 输入层权重(W)与偏置(B):在区间[-1, 1]内随机生成。 * 隐层输出(H):计算 $H = Activation(WX + B)$。 * 输出层权重(Beta):通过最小二乘法求解 $Hbeta = T$。
  • 代码特点:为了保证数值稳定性,代码中使用了Moore-Penrose伪逆(pinv函数)来求解输出权重Beta。这是最原始且标准的ELM实现方式。

2. 有效极限学习机 (EELM - Effective ELM)

  • 核心改进:EELM旨在解决随机权重可能导致隐层节点饱和或无效的问题。
  • 代码实现
* 在train_eelm函数中,算法并未直接使用[-1, 1]的均匀分布,而是引入了一个缩放因子 scale_factor = 1.5 / sqrt(n_features)。 * 通过该因子控制初始权重和偏置的方差,确保输入信号映射到激活函数(如Sigmoid)的线性敏感区域,从而提高梯度的有效传递和特征提取能力。 * 其余训练步骤与标准ELM保持一致,保证了对比的公平性。

3. 改进型极限学习机 (YELM)

  • 核心改进:YELM引入了Tikhonov正则化(岭回归)思想,旨在解决ELM在面对隐层节点过多或数据共线性时可能出现的过拟合及矩阵病态问题。
  • 代码实现
* 在train_yelm函数中,不再使用pinv求解。 * 引入正则化系数 C(代码中默认设为1000)。 * 输出权重Beta使用的是闭式解公式:$beta = (HH^T + frac{I}{C})^{-1} H T$。 * 这种实现方式通过在H矩阵的自相关矩阵对角线上增加微小扰动,显著提升了系统的鲁棒性和泛化能力。

程序运行逻辑详解

main.m文件的实际执行流程完全遵循以下逻辑:

  1. 参数配置 (Config)
初始化实验参数,设定运行次数(10次)、隐层节点数(200个)、激活函数类型(Sigmoid)以及YELM的正则化参数C。

  1. 数据生成与预处理
* 调用load_pendigits_simulation生成训练集和测试集。 * 使用mapminmax将特征数据归一化至[-1, 1]区间。 * 使用自定义函数ind2vec_custom将整数型标签转换为神经网络所需的One-Hot编码格式。

  1. 多轮实验循环
程序进入一个循环(共执行n_runs次),在每一轮中依次执行: * 训练与测试ELM:记录训练时间、测试时间和分类准确率。 * 训练与测试EELM:应用优化后的初始化策略进行训练和评估。 * 训练与测试YELM:应用正则化策略进行训练和评估。 * 进度反馈:通过进度条(Waitbar)和命令行实时显示当前轮次的各算法准确率。

  1. 结果汇总与展示
* 循环结束后,计算各算法在所有运行轮次中的平均准确率、标准差及平均耗时。 * 调用print_results函数格式化打印最终统计结果。 * 调用plot_comparison函数绘制图表: * 准确率对比图:使用箱线图展示三种算法的稳定性分布。 * 耗时对比图:使用双柱状图展示训练与测试阶段的时间开销。

关键函数说明

  • main: 主入口函数,负责参数定义、流程控制及结果调度。
  • train_elm / train_eelm / train_yelm: 分别对应三种不同策略的训练函数,核心区别在于权重的初始化方式及输出权重Beta的求解公式。
  • test_elm: 统一的预测函数,利用训练好的模型参数(W, B, Beta)计算测试集输出并转换为类别标签。
  • activation_func: 激活函数封装,支持Sigmoid, Sine, Hardlim, ReLU等多种类型。
  • load_pendigits_simulation: 内部集成的模拟数据生成器,替代了外部文件读取,确保代码独立可运行。
  • plot_comparison: 专用的绘图函数,负责生成最终的对比可视化结果。