背景

前向神经网络的学习速度通常远低于要求,并且在过去几十年里一直是其应用的一个主要瓶颈。背后的两个关键原因可能是:

1)基于慢梯度的学习算法被广泛应用于神经网络的训练。

2)利用这种学习算法对网络的所有参数进行迭代调整。

与这些传统实现不同,极限学习机(ELM)随机化广义单隐藏层前馈网络(SLFN)的所有隐藏节点参数,并通过分析确定SLFN的输出权重。
•所有隐藏节点参数均独立于目标功能或训练数据集。 ELM的所有参数都可以通过分析确定,而不必进行调整。
•理论上,该算法倾向于以极快的学习速度提供良好的泛化性能。

将迭代算法变成矩阵算法。

与BP算法和SVM相比,ELM具有以下几个显着特征:

• 使用方便。 除预定义的网络体系结构外,无需手动调整任何参数。
•更快的学习速度。 大多数训练可以在毫秒,秒和分钟的时间内完成。
•更高的泛化性能。 在大多数情况下,它可以获得比BP更好的泛化性能,并达到与SVM相似或更好的泛化性能。
•适用于几乎所有非线性激活函数。几乎所有分段的连续函数(包括不连续,微分,非微分函数)都可以用作激活函数。
•适用于完全复杂的激活功能。 完全复杂的功能也可以用作ELM中的激活功能。

ELM代码学习

训练样本函数elmtrain.m

function [IW,B,LW,TF,TYPE] = elmtrain(P,T,N,TF,TYPE)
% ELMTRAIN Create and Train a Extreme Learning Machine
% Syntax
% [IW,B,LW,TF,TYPE] = elmtrain(P,T,N,TF,TYPE)
% Description
% Input
% P   - Input Matrix of Training Set  (R*Q)  输入矩阵Q代表样本个数P=R*Q
% T   - Output Matrix of Training Set (S*Q) 输出矩阵,训练样本
% N   - Number of Hidden Neurons (default = Q) 隐含层神经元的个数
% TF  - Transfer Function: 传递函数
%       'sig' for Sigmoidal function (default)
%       'sin' for Sine function
%       'hardlim' for Hardlim function
% TYPE - Regression (0,default) or Classification (1)  类型,选择回归还是分类
% Output
% IW  - Input Weight Matrix (N*R) 随机产生的隐藏层和输入层之间的连接权值
% B   - Bias Matrix  (N*1) 隐含层与神经元的阈值
% LW  - Layer Weight Matrix (N*S) 隐含层和输出层通过求解方程组得到的连接权值% Example
% Regression:
% [IW,B,LW,TF,TYPE] = elmtrain(P,T,20,'sig',0)
% Y = elmtrain(P,IW,B,LW,TF,TYPE)
% Classification
% [IW,B,LW,TF,TYPE] = elmtrain(P,T,20,'sig',1)
% Y = elmtrain(P,IW,B,LW,TF,TYPE)%% 至少需要给出2个参数P和T
if nargin < 2error('ELM:Arguments','Not enough input arguments.');
end
if nargin < 3N = size(P,2);
end
%三个参数默认是sig
if nargin < 4TF = 'sig';
end
if nargin < 5TYPE = 0;
end
if size(P,2) ~= size(T,2)error('ELM:Arguments','The columns of P and T must be same.');
end
[R,Q] = size(P);
if TYPE  == 1T  = ind2vec(T);
end
[S,Q] = size(T);
% Randomly Generate the Input Weight Matrix
IW = rand(N,R) * 2 - 1;
% Randomly Generate the Bias Matrix
B = rand(N,1);
BiasMatrix = repmat(B,1,Q);
% Calculate the Layer Output Matrix H
tempH = IW * P + BiasMatrix;
switch TFcase 'sig'H = 1 ./ (1 + exp(-tempH));case 'sin'H = sin(tempH);case 'hardlim'H = hardlim(tempH);
end
% Calculate the Output Weight Matrix
LW = pinv(H') * T';

预测样本函数elempredict.m

function Y = elmpredict(P,IW,B,LW,TF,TYPE)
% ELMPREDICT Simulate a Extreme Learning Machine
% Syntax
% Y = elmtrain(P,IW,B,LW,TF,TYPE)
% Description
% Input
% P   - Input Matrix of Training Set  (R*Q)输入矩阵
% IW  - Input Weight Matrix (N*R)
% B   - Bias Matrix  (N*1)
% LW  - Layer Weight Matrix (N*S)
% TF  - Transfer Function:
%       'sig' for Sigmoidal function (default)
%       'sin' for Sine function
%       'hardlim' for Hardlim function
% TYPE - Regression (0,default) or Classification (1)
% Output
% Y   - Simulate Output Matrix (S*Q) 估算输出矩阵
% Example
% Regression:
% [IW,B,LW,TF,TYPE] = elmtrain(P,T,20,'sig',0)
% Y = elmtrain(P,IW,B,LW,TF,TYPE)
% Classification
% [IW,B,LW,TF,TYPE] = elmtrain(P,T,20,'sig',1)
% Y = elmtrain(P,IW,B,LW,TF,TYPE)
% See also ELMTRAIN
% Yu Lei,11-7-2010
% Copyright www.matlabsky.com
% $Revision:1.0 $
if nargin < 6error('ELM:Arguments','Not enough input arguments.');
end
% Calculate the Layer Output Matrix H
Q = size(P,2);
BiasMatrix = repmat(B,1,Q);
tempH = IW * P + BiasMatrix;
switch TFcase 'sig'H = 1 ./ (1 + exp(-tempH));case 'sin'H = sin(tempH);case 'hardlim'H = hardlim(tempH);
end
% Calculate the Simulate Output
Y = (H' * LW)';
if TYPE == 1 %分类temp_Y = zeros(size(Y));for i = 1:size(Y,2)[~,index] = max(Y(:,i));temp_Y(index,i) = 1;endY = vec2ind(temp_Y);
end

案例实战

1、汽油辛烷值预测-----回归问题

数据分析

整体代码

%% I. 清空环境变量
clear all
clc%% II. 训练集/测试集产生
%%
% 1. 导入数据
load spectra_data.mat%%
% 2. 随机产生训练集和测试集
temp = randperm(size(NIR,1));% 训练集——50个样本
P_train = NIR(temp(1:50),:)';
T_train = octane(temp(1:50),:)';% 测试集——10个样本
P_test = NIR(temp(51:end),:)';
T_test = octane(temp(51:end),:)';
N = size(P_test,2);%% III. 数据归一化
%%
% 1. 训练集
[Pn_train,inputps] = mapminmax(P_train);
Pn_test = mapminmax('apply',P_test,inputps);
%%
% 2. 测试集
[Tn_train,outputps] = mapminmax(T_train);
Tn_test = mapminmax('apply',T_test,outputps);%% IV. ELM创建/训练
%Pn_train401*50每一列是一个样本。同BP神经网络,可调节参数
[IW,B,LW,TF,TYPE] = elmtrain(Pn_train,Tn_train,30,'sig',0);%% V. ELM仿真测试
tn_sim = elmpredict(Pn_test,IW,B,LW,TF,TYPE);
%%
% 1. 反归一化
T_sim = mapminmax('reverse',tn_sim,outputps);%% VI. 结果对比
result = [T_test' T_sim'];
%%
% 1. 均方误差
E = mse(T_sim - T_test);%%
% 2. 决定系数
N = length(T_test);
R2=(N*sum(T_sim.*T_test)-sum(T_sim)*sum(T_test))^2/((N*sum((T_sim).^2)-(sum(T_sim))^2)*(N*sum((T_test).^2)-(sum(T_test))^2)); %% VII. 绘图
figure(1)
plot(1:N,T_test,'r-*',1:N,T_sim,'b:o')
grid on
legend('真实值','预测值')
xlabel('样本编号')
ylabel('辛烷值')
string = {'测试集辛烷值含量预测结果对比(ELM)';['(mse = ' num2str(E) ' R^2 = ' num2str(R2) ')']};
title(string)

2、鸢尾花种类识别-----分类问题

数据分析

整体代码

%% I. 清空环境变量
clear all
clc%% II. 训练集/测试集产生
%%
% 1. 导入数据
load iris_data.mat%%
% 2. 随机产生训练集和测试集
P_train = [];
T_train = [];
P_test = [];
T_test = [];
for i = 1:3temp_input = features((i-1)*50+1:i*50,:);temp_output = classes((i-1)*50+1:i*50,:);n = randperm(50);% 训练集——120个样本P_train = [P_train temp_input(n(1:40),:)'];T_train = [T_train temp_output(n(1:40),:)'];% 测试集——30个样本P_test = [P_test temp_input(n(41:50),:)'];T_test = [T_test temp_output(n(41:50),:)'];
end%% III. ELM创建/训练
[IW,B,LW,TF,TYPE] = elmtrain(P_train,T_train,20,'sig',1);%% IV. ELM仿真测试
T_sim_1 = elmpredict(P_train,IW,B,LW,TF,TYPE);
T_sim_2 = elmpredict(P_test,IW,B,LW,TF,TYPE);%% V. 结果对比
result_1 = [T_train' T_sim_1'];
result_2 = [T_test' T_sim_2'];
%%
% 1. 训练集正确率
k1 = length(find(T_train == T_sim_1));
n1 = length(T_train);
Accuracy_1 = k1 / n1 * 100;
disp(['训练集正确率Accuracy = ' num2str(Accuracy_1) '%(' num2str(k1) '/' num2str(n1) ')'])%%
% 2. 测试集正确率
k2 = length(find(T_test == T_sim_2));
n2 = length(T_test);
Accuracy_2 = k2 / n2 * 100;
disp(['测试集正确率Accuracy = ' num2str(Accuracy_2) '%(' num2str(k2) '/' num2str(n2) ')'])%% VI. 绘图
figure(2)
plot(1:30,T_test,'bo',1:30,T_sim_2,'r-*')
grid on
xlabel('测试集样本编号')
ylabel('测试集样本类别')
string = {'测试集预测结果对比(ELM)';['(正确率Accuracy = ' num2str(Accuracy_2) '%)' ]};
title(string)
legend('真实值','ELM预测值')

神经网络GUI实现

以辛烷值预测为例:
1、首先,运行至ELM创建之前:

%% I. 清空环境变量
clear all
clc%% II. 训练集/测试集产生
%%
% 1. 导入数据
load spectra_data.mat%%
% 2. 随机产生训练集和测试集
temp = randperm(size(NIR,1));% 训练集——50个样本
P_train = NIR(temp(1:50),:)';
T_train = octane(temp(1:50),:)';% 测试集——10个样本
P_test = NIR(temp(51:end),:)';
T_test = octane(temp(51:end),:)';
N = size(P_test,2);%% III. 数据归一化
%%
% 1. 训练集
[Pn_train,inputps] = mapminmax(P_train);
Pn_test = mapminmax('apply',P_test,inputps);
%%
% 2. 测试集
[Tn_train,outputps] = mapminmax(T_train);
Tn_test = mapminmax('apply',T_test,outputps);

2、然后,命令框输入nntool(有的新版本的matlab应该是nnstart

3、导入数据进行分析:

4、创建网络结构

5、参数设置

输入输出设置

6、仿真测试,结果生成到工作区内:中文无效所以改为bpnet


和代码方式一样,只不过这是可视化出来了。

第七课 极限学习机( Extreme Learning Machine, ELM)相关推荐

  1. MATLAB机器学习系列-8 极限学习机(Extreme Learning Machine, ELM)原理及其代码实现

    极限学习机(Extreme Learning Machine, ELM) 极限学习机网络结构和BP网络结构类似. 和BP神经网络不同点: 极限学习机输入层到隐含层的权重W是可以随意指定的.BP神经网络 ...

  2. 极限学习机(Extreme Learning Machine)ELM

    二.ELM 1.算法介绍及功能 极限学习机(Extreme Learning Machine) ELM是一种针对单隐含层前馈神经网络(Single-hiddenLayerFeedforwardNeur ...

  3. 极限学习机(Extreme Learning Machine, ELM)的训练与预测matlab仿真

    目录 1.算法概述 2.仿真效果 3.MATLAB仿真源码 1.算法概述 极限学习机(ELM)是当前一类非常热门的机器学习算法,被用来训练单隐层前馈神经网络(SLFN

  4. 极限学习机(Extreme Learning Machine)概述

    摘要 当今研究领域的一项事实就是,前向神经网络(feed-forward neural networks)的训练速度比人们所期望的速度要慢很多.并且,在过去的几十年中,前向神经网络在应用领域存在着很大 ...

  5. 极限学习机 Extreme Learning Machines 介绍

    什么是极限学习机? 极限学习机(ELM, Extreme Learning Machines)是一种前馈神经网络,最早由新加坡南洋理工大学黄广斌教授于2006年提出.其发表的文章中对于极限学习机的描述 ...

  6. 【UWB】ELM,Extreme Learning Machine 极限学习机

    文章目录 例子 1 例子 2 Ref. 例子 1 % 任务2: ELM 网络 % Date: 2021-10-15 % Author: Zhao-Jichao clear clc%% 训练 % 导入数 ...

  7. 极限学习机(Extreme Learning Machine)(小白之路)

    优秀的博客已经很多了,在这里我粘贴一些对我有帮助的博客,感谢大佬们!(既有原理 也有 一些实现[python 和 matlab]): ①极限学习机(Extreme Learning Machine, ...

  8. 2Speech Emotion Recognition Using Deep Neural Network and Extreme Learning Machine

    文章目录 前言 一.文章内容 二.文章总结 前言 原文地址-2014年 一.文章内容 不同与当时普遍使用统计方法研究感情识别,本文章主要是提出了一种使用DNN网络进行特征提取的办法,采用的模型结构如下 ...

  9. 极限学习机Python开源库——elm【内附案例源码】

最新文章

  1. java虚拟机(二)
  2. 玩转算法面试-第四章查找值之leetcod相关笔记
  3. Vue如何循环提取对象数组中的值
  4. Vue.js学习总结(1)——Windows下Vue.js开发环境搭建
  5. ROS入门-14.参数的使用与编程方法
  6. 百万人学AI 万人在线大会, 15+ 场直播抢先看!
  7. ScriptX打印控件的使用
  8. ios 输入法扩展_iOS8、iOS9都可用的原生输入法扩展词库(搜狗词库)
  9. matlab实现马尔可夫链,马尔可夫链matlab源码
  10. 怎么把照片背景变成蓝色
  11. android组件化管理单例,Pigeon——支持增量编译和组件化开发的路由框架
  12. ffmpeg 图片合成视频
  13. iOS 直播流程概述
  14. 写博客没高质量配图?python爬虫教你绕过限制一键搜索下载图虫创意图片!
  15. 哈工大计算机考研854会改成408吗?哈工大854性价比如何?怎么复习?
  16. 瀑布模型的特点及优缺点
  17. 智能工厂 | 工业4.0
  18. 通量数据处理(Python)——NC格式转为CSV格式
  19. zara小程序怎么付款_能扫码付款并且可以打折的微信小程序怎么做?
  20. Java学习之性能优化常用方法分享

热门文章

  1. 单源最短路径(C++实现)
  2. 详解零知识证明的四大基础技术,如何与以太坊发生反应
  3. 验证手机号和验证邮箱和验证网址
  4. 利用画线插件如何删除线
  5. 全免费建站攻略!freewebhostingarea空间+免费tk域名
  6. linux安装 xen,Centos安装Xen总结
  7. 服务器的CPU跟家用电脑的一样吗,服务器该怎么选择CPU配置
  8. 大数据BAT经典面试题
  9. 自建内网邮箱服务器(上)
  10. Vue2.0-vue基础