MATLAB机器学习系列-8 极限学习机(Extreme Learning Machine, ELM)原理及其代码实现
生活随笔
收集整理的这篇文章主要介绍了
MATLAB机器学习系列-8 极限学习机(Extreme Learning Machine, ELM)原理及其代码实现
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
极限学习机(Extreme Learning Machine, ELM)
极限学习机网络结构和BP网络结构类似。 和BP神经网络不同点:原理
前向传播图见下
T为目标输出,g为激活函数
把上图简洁化,写成矩阵,H为输入层与隐含层相乘的结果
该算法创造者认为如果隐含层神经元个数等于输入样本个数相等,则
HB -T 矩阵范数为0,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预测值')回归
汽油辛烷值预测
代码和数据百度云
链接:https://pan.baidu.com/s/1o08kfLvUN3n5pYyE9ycfWg 提取码:q9vz 复制这段内容后打开百度网盘手机App,操作更方便哦
作者:电气工程的计算机萌新-余登武
总结
以上是生活随笔为你收集整理的MATLAB机器学习系列-8 极限学习机(Extreme Learning Machine, ELM)原理及其代码实现的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 怎么计算平安银行信用卡的分期利息 算法一
- 下一篇: MATLAB机器学习系列-9:决策树和随