欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

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

发布时间:2024/9/30 编程问答 55 豆豆
生活随笔 收集整理的这篇文章主要介绍了 MATLAB机器学习系列-8 极限学习机(Extreme Learning Machine, ELM)原理及其代码实现 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

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

极限学习机网络结构和BP网络结构类似。 和BP神经网络不同点:
  • 极限学习机输入层到隐含层的权重W是可以随意指定的。BP神经网络W层需要在学习时进行调整,而极限学习机不需要调整。由于不需要调整,大大加快了速度。
  • 极限学习机的隐含层到输出层的权重B也不需要迭代调整,而是通过解方程组的方法求出权重。
  • 原理
    前向传播图见下
    T为目标输出,g为激活函数

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

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

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

    权重学习流程

  • 第一步:随机产生输入层到隐含层之间的权重值W和阈值(偏置)b
  • 第二步:计算隐含层的输出矩阵H
  • 第三步:求解隐含层和输出层之间权重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)原理及其代码实现的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。