极限学习机(Extreme Learning Machine, ELM)

极限学习机网络结构和BP网络结构类似。 和BP神经网络不同点:

  1. 极限学习机输入层到隐含层的权重W是可以随意指定的。BP神经网络W层需要在学习时进行调整,而极限学习机不需要调整。由于不需要调整,大大加快了速度。
  2. 极限学习机的隐含层到输出层的权重B也不需要迭代调整,而是通过解方程组的方法求出权重。

原理
前向传播图见下
T为目标输出,g为激活函数

把上图简洁化,写成矩阵,H为输入层与隐含层相乘的结果

该算法创造者认为如果隐含层神经元个数等于输入样本个数相等,则
HB -T 矩阵范数为0,0误差。

如果隐含层的神经元个数小于待学习的样本个数,模型可以以一定精度学习,即模型的误差小于一定的值

权重学习流程

  1. 第一步:随机产生输入层到隐含层之间的权重值W和阈值(偏置)b
  2. 第二步:计算隐含层的输出矩阵H
  3. 第三步:求解隐含层和输出层之间权重B,因为HB-T的矩阵范数为0,则求解公式如下

因为可能存在H的逆矩阵不存在的情况,导致最后B没有解,当时作者提出这个算法的时候给出的解决方法是求伪逆矩阵。
现在的解决方法,如图

在H后面加上一个小块矩阵,使
可逆。
则权重解为

极限学习机相比于BP神经网络,SVM有什么特征

  • 易用性。除了预定义的网络架构外,不需要手动调优任何参数
  • 更快的学习速度。大多数训练可以在毫秒、秒和分钟内完成
  • 更高的泛化性能。在大多数情况下,该算法比BP算法具有更好的泛化性能与SVM相似或优于SVM的泛化性能。
  • 适用于几乎所有的非线性激活函数。几乎所有分段连续(包括不连续)微分、非微分函数)可作为激活函数使用。BP神经网络要求激活函数可导可微分。
  • 适合于完全复杂的激活函数。完全复杂函数也可以作为激活函数使用ELM。

极限学习机( ELM)仿真

重点函数

  • nargin:n arg in:自动计算出方法输入了几个参数
  • error:给出错误信息
  • pinv:求伪逆矩阵
  • sin / hardlim:涉及到激活函数
  • elmtrain 自己写的函数,用于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)
% 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)
% See also ELMPREDICT
% Yu Lei,11-7-2010
% Copyright www.matlabsky.com
% $Revision:1.0 $
if nargin < 2error('ELM:Arguments','Not enough input arguments.');
end
if nargin < 3N = size(P,2);
end
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';

elmpredict.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 == 1temp_Y = zeros(size(Y));for i = 1:size(Y,2)[~,index] = max(Y(:,i));temp_Y(index,i) = 1;endY = vec2ind(temp_Y);
end

分类
鸢尾花侯种类识别
这个数据集网上很多,就不放啦

main_iris.m

%% 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预测值')

回归
汽油辛烷值预测

%% 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创建/训练
[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)

代码和数据百度云

链接:https://pan.baidu.com/s/1o08kfLvUN3n5pYyE9ycfWg
提取码:q9vz
复制这段内容后打开百度网盘手机App,操作更方便哦


作者:电气工程的计算机萌新-余登武

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

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

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

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

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

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

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

  4. 第七课 极限学习机( Extreme Learning Machine, ELM)

    背景 前向神经网络的学习速度通常远低于要求,并且在过去几十年里一直是其应用的一个主要瓶颈.背后的两个关键原因可能是: 1)基于慢梯度的学习算法被广泛应用于神经网络的训练. 2)利用这种学习算法对网络的 ...

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

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

  6. MATLAB机器学习系列-9:决策树和随机森林的原理及其例子代码实现

    决策树 原理 决策树通过把样本实例从根节点排列到某个叶子节点来对其进 行分类.树上的每个非叶子节点代表对一个属性取值的测试, 其分支就代表测试的每个结果:而树上的每个叶子节点均代表 一个分类的类别,树 ...

  7. MATLAB机器学习系列-5 RBF、GRNN和PNN神经网络原理及其例子代码

    RBF(径向基神经网络) GRNN广义神经网络 PNN概率神经网络 RBF算例实现(回归) 数据集 % 1. 导入数据 load spectra_data.mat NIR输入,octane输出 %% ...

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

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

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

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

最新文章

  1. 视觉传感器:3D感知算法
  2. 阿里巴巴达摩院ICLR 2020论文:从群体动态中认知个体
  3. rsync配置与报错总结
  4. ORA-12638: 身份证明检索失败
  5. 基于epoll的简单的http服务器
  6. python预测疾病_吴裕雄--天生自然python机器学习:使用Logistic回归从疝气病症预测病马的死亡率...
  7. python基础七之copy
  8. 亿航智能⻓续航⻜机有望在4-8周内首⻜亮相
  9. php radiobutton,radiobutton怎么用
  10. java系列2:方法的重载
  11. 【二分法】剑指offer:二维数组中的查找
  12. bootstrap-select 插件使用详解
  13. 洛谷每日三题之第三天(第四天补做)
  14. 2020-05-28
  15. 三国鼎立企查查、天眼查、微猫的三国大战
  16. iOS 客户端 IM 以及列表 UI 框架
  17. socket编程——upd(数据报套接字)
  18. SwipeRefreshLayout极其简单的下拉刷新工具
  19. 【JavaScript】原生态兼容IE6的图片轮播
  20. win10控制3D对象、视频等七个文件夹的显示与否

热门文章

  1. 1333和1600能双通道吗_80后童年神作《光环致远星》steam解锁 ?你的电脑还OK吗?...
  2. 前端设定项目奖金有多少_华为资深HR:年终奖不是一个合理的奖金制度
  3. GitHub轻松阅读微服务实战项目流程详解【第二天:API网关的设计与实现】
  4. 酷Q 小i——添加应用
  5. BugKuCTF WEB 网站被黑
  6. android触摸事件透传,Android中父View穿透子View响应长按事件
  7. 【学习笔记】springboot的AutoConfigurationImportSelector 、@EnableAutoConfiguraion和@import解析
  8. vue中v-model原理
  9. 初探swift语言的学习笔记十一(performSelector)
  10. 使用TCP的简单C/S程序