1 内容介绍

极限学习机(extreme learning machine,ELM)作为一种新兴的机器学习方法,已经成为了一个热门的研究方向。 ELM 随机确定单隐含层网络的输入权值和隐含层节点偏置,通过简单计算即可解析得到输出权值,不仅加快了学习速度,而且具有很好的泛化能力。 核函数 ELM 将核函数引入到极限学习机理论中,可以得到最小平方优化解,解决了

ELM 算法随机初始化问题,对模型学习参数具有较好的鲁棒性,具有更稳定的、更好的泛化性能。

2 仿真代码

function omega = kernel_matrix(Xtrain,kernel_type, kernel_pars,Xt)

nb_data = size(Xtrain,1);%nxm  样本数nb
if strcmp(kernel_type,'RBF_kernel'),
    if nargin<4,
        XXh = sum(Xtrain.^2,2)*ones(1,nb_data);%nxn
        omega = XXh+XXh'-2*(Xtrain*Xtrain');
        omega = exp(-omega./kernel_pars(1));
    else
        XXh1 = sum(Xtrain.^2,2)*ones(1,size(Xt,1));
        XXh2 = sum(Xt.^2,2)*ones(1,nb_data);
        omega = XXh1+XXh2' - 2*Xtrain*Xt';
        omega = exp(-omega./kernel_pars(1));
    end
    
elseif strcmp(kernel_type,'lin_kernel')
    if nargin<4,
        omega = Xtrain*Xtrain';
    else
        omega = Xtrain*Xt';
    end
    
elseif strcmp(kernel_type,'poly_kernel')
    if nargin<4,
        omega = (Xtrain*Xtrain'+kernel_pars(1)).^kernel_pars(2);
    else
        omega = (Xtrain*Xt'+kernel_pars(1)).^kernel_pars(2);
    end
    
elseif strcmp(kernel_type,'wav_kernel')
    if nargin<4,
        XXh = sum(Xtrain.^2,2)*ones(1,nb_data);
        omega = XXh+XXh'-2*(Xtrain*Xtrain');
        
        XXh1 = sum(Xtrain,2)*ones(1,nb_data);
        omega1 = XXh1-XXh1';
        omega = cos(kernel_pars(3)*omega1./kernel_pars(2)).*exp(-omega./kernel_pars(1));
        
    else
        XXh1 = sum(Xtrain.^2,2)*ones(1,size(Xt,1));
        XXh2 = sum(Xt.^2,2)*ones(1,nb_data);
        omega = XXh1+XXh2' - 2*(Xtrain*Xt');
        
        XXh11 = sum(Xtrain,2)*ones(1,size(Xt,1));
        XXh22 = sum(Xt,2)*ones(1,nb_data);
        omega1 = XXh11-XXh22';

clc;clear;close all
%% 将鲸鱼与改进鲸鱼用于函数极小值寻优,验证改进算法的有效性
% 优化函数极小值
popsize=10;
Max_iter=100;
dim=5;
[best0,pop0,trace0]=woa(popsize,Max_iter,dim);
best0
[best,pop,trace]=vnwoa(popsize,Max_iter,dim);
best
%%
figure
subplot(121)
plot(trace0)
hold on
plot(trace)
legend('woa','vnwoa')

subplot(122)
plot(log10(trace0))%对结果取对数 使结果更加直观
hold on
plot(log10(trace))
legend('woa','vnwoa')

function y=boundary(x,hmin,hmax);
[m n]=size(x);
for i=1:m
    for j=1:n
    if x(i,j)>=hmax
        x(i,j)=rand*(hmax-hmin)+hmin;
    elseif x(i,j)<=hmin
        x(i,j)=rand*(hmax-hmin)+hmin;
    end
end
y=x;

end%

% ylabel('样本标签')
% legend('真实标签', '预测标签');
% title(['KELM分类精度为:',num2str(acc*100),'%'])
xlabel('Number of test samples');
ylabel('Class label');
legend('Actual output label','Desired output label');
title(['Accuracy:',num2str(acc*100),'%']);
legend('boxoff');
hold off;        
        omega = cos(kernel_pars(3)*omega1./kernel_pars(2)).*exp(-omega./kernel_pars(1));
    end
end

function [Leader_score,Leader_pos,Convergence_curve]=woa(sizepop,Max_iter,dim)
lb=-100;
ub=100;
Convergence_curve=zeros(1,Max_iter);
for i=1:sizepop
    Positions(i,:)=rand(1,dim).*(ub-lb)+lb;
end
for i=1:sizepop
    p(i)=fun(Positions(i,:)); %计算当前个体适应度值
end
[~, index]=min(p);
Leader_pos=Positions(index,:);
Leader_score=p(index);

% Main loop
for t=1:Max_iter
    a=5-t*((2)/Max_iter); 
    a2=-1+t*((-1)/Max_iter);
    for i=1:size(Positions,1)
        r1=rand; 
        r2=rand; 
        
        A=2*a*r1-a;
        C=2*r2;    
        b=1;               
        l=(a2-1)*rand+1;   
        p = rand;        
        for j=1:size(Positions,2)
            
            if p<0.5
                if abs(A)>=1
                    rand_leader_index = floor(sizepop*rand+1);
                    X_rand = Positions(rand_leader_index, :);
                    D_X_rand=abs(C*X_rand(j)-Positions(i,j)); 
                    Positions(i,j)=X_rand(j)-A*D_X_rand;      
                    
                elseif abs(A)<1
                    D_Leader=abs(C*Leader_pos(j)-Positions(i,j));
                    Positions(i,j)=Leader_pos(j)-A*D_Leader;
                end
                
            elseif p>=0.5
                distance2Leader=abs(Leader_pos(j)-Positions(i,j));
                Positions(i,j)=distance2Leader*exp(b.*l).*cos(l.*2*pi)+Leader_pos(j);
            end
            
        end
        
        Positions(i,:)=boundary(Positions(i,:),lb,ub);
        
        fitness=fun(Positions(i,:));
     
        if fitness<Leader_score 
            Leader_score=fitness;
            Leader_pos=Positions(i,:);
        end
    end
    
    Convergence_curve(t)=Leader_score;
end

function f =luoyiman_localbest(x1,x2,x3,x4,x5)
%求解当前个体粒子环形邻域中的局部最优,然后用这个局部最优替换当前个体
K0=[x1;x2;x3;x4;x5];
K1=[fun(x1), ...
    fun(x2), ...
    fun(x3), ...
    fun(x4), ...
    fun(x5)];
[~ ,index]=min(K1);
f=K0(index,:);

function fit=fun(pop)
% 这3种函数的最小值都是0

%1.sphere函数
% fit=sum(pop.^2);

%2. ackly函数
% fit=-20*exp(-0.2*sqrt(mean(pop.^2)))-exp(mean(cos(2*pi.*pop)))+20+exp(1);

% 3.rastrigin's函数
fit=20+pop(1)^2+pop(2)^2-10*(cos(2*pi*pop(1))+cos(2*pi*pop(2)));

3 运行结果

4 参考文献

[1]吴忠强, 卢雪琴, 何怡林,等. 基于鲸鱼算法优化极限学习机的微电网故障诊断方法[J]. 智慧电力, 2022, 50(2):7.

[2]郭延华, 赵帅. 基于KPCA-WOA-KELM的岩爆烈度预测[J]. 河北工程大学学报:自然科学版, 2021, 38(2):7.

[3]裘日辉, 刘康玲, 谭海龙,等. 基于极限学习机的分类算法及在故障识别中的应用[J]. 浙江大学学报:工学版, 2016, 50(10):8.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

【预测模型-ELM分类】基于鲸鱼算法优化核极限学习机实现数据分类附matlab代码相关推荐

  1. 【Kelm分类】基于哈里斯鹰算法优化核极限学习机实现数据分类附matlab代码

    1 简介 为了提高核极限学习机(KELM)的分类正确率,采用哈里斯鹰算法(HHO)对惩罚系数,宽度参数两个参数进行优化.首先,根据乳腺良恶性肿瘤数据库训练集并利用哈里斯鹰算法优化核极限学习机;然后,通 ...

  2. ​【预测模型】基于粒子群算法优化核极限学习机实现数据预测matlab代码

    1 简介 煤与瓦斯突出是煤矿煤炭生产过程中面临的主要动力灾害之一.研究表明,在有发生煤与瓦斯突出的矿井中,煤层均发育一定程度的构造煤,且构造煤厚度越大,瓦斯突出的危险性越严重.因此,如果能够准确预测出 ...

  3. 【Kelm预测】基于哈里斯鹰算法优化核极限学习机实现数据预测matlab代码

    1 简介 工业过程常含有显著的非线性,时变等复杂特性,传统的核极限学习机有时无法充分利用数据信息,所建软测量模型预测性能较差.为了提高核极限学习机的泛化能力和预测精度,提出一种哈里斯鹰算法结合核极限学 ...

  4. 【预测模型-DELM分类】基于哈里斯鹰算法改进深度学习极限学习机实现数据分类附matlab代码

    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.

  5. 【回归预测-BP预测】基于灰狼算法优化BP神经网络实现数据回归预测附matlab代码

    1 内容介绍 Mirjalili 等在 2014 年 提 出 了 灰 狼 优 化 ( Grey Wolf Optimizer,GWO) 算法,是一种新型群智能优化算法,通过模拟自然界中灰狼寻找.包围和 ...

  6. 【回归预测-FNN预测】基于蝙蝠算法优化前馈网络实现数据回归预测附Matlab代码

    1 内容介绍 强大的非线性映射能力使得人工神经网络越来越多地应用于数值预测.工程控制中,但神经网络在学习过程中,不可避免的存在着全局搜索能力差.容易跳入局部最优等不足,因而用神经网络技术预测的数据并不 ...

  7. 【预测模型】基于布谷鸟算法改进BP神经网络实现数据预测附matlab代码

    一. BP神经网络预测算法简介 BP网络(Back-ProPagation Network)又称反向传播神经网络, 通过样本数据的训练,不断修正网络权值和阈值使误差函数沿负梯度方向下降,逼近期望输出. ...

  8. 【BP预测】基于鸟群算法优化BP神经网络实现数据预测附Matlab代码

    1 简介 热舒适度是室内环境舒适性的评价指标,由于热舒适度的计算是一个复杂的非线性迭代过程,不便应用于空调实时控制系统中,为解决这一问题,可利用BP神经网络算法对热舒适度进行预测.但为了改善传统BP神 ...

  9. 【ElM分类】基于哈里斯鹰优化ElM神经网络实现数据分类附matlab代码

    1 简介 为了提高核极限学习机(ELM)的分类正确率,采用哈里斯鹰算法(HHO)对惩罚系数,宽度参数两个参数进行优化.首先,根据乳腺良恶性肿瘤数据库训练集并利用哈里斯鹰算法优化核极限学习机;然后,通过 ...

最新文章

  1. Xbox One:微软商店中都是Xbox One的主题
  2. Linux 4.0 里,你可能再也不需要重启你的操作系统。
  3. 滴滴重磅开源跨平台统一 MVVM 框架 Chameleon
  4. java结丹期(11)----javaweb(jstljsp)
  5. OpenGL Texture Wrap Modes纹理包裹模式的实例
  6. wgs utm java,Java,将经纬度转换为UTM
  7. javascript中作用域、全局作用域、局部作用域、隐式全局变量、块级作用域、作用域链、预解析
  8. mybatis plus使用in查询
  9. Linux上FTP服务的相关配置2:搭建FTPs及虚拟账号
  10. zoj1134 Strategic Game(DP/图论)
  11. fastboot烧写命令
  12. DEVCON.EXE管理USB
  13. win10使用powerShell执行ps1文件方法
  14. 激活windows错误代码 0x80072F8F
  15. 签证者的武林秘笈(一)—-来自太傻的签证哲学
  16. 往事如烟 - 梧桐叶落
  17. kubernetes入门(上)
  18. 无线降噪蓝牙耳机评测,南卡、JBL、OPPO、荣耀降噪蓝牙耳机推荐
  19. java video src请求视频流,视频不能拖拽快进问题解决方案
  20. 当代世界经济的发展趋势

热门文章

  1. 移动硬盘 无法访问 解决方法
  2. 盘是什么意思计算机网络,hdd网络上什么意思
  3. 【docker详解02】-docker安装
  4. 2020年不再迷茫,解密:拼多多无货源店群实操分享!
  5. 关于腾讯应用宝上架的应用版本回退的问题
  6. Playing Atari with Deep Reinforcement Learning-笔记
  7. 微分几何与广义相对论教程
  8. Shipyard的几个概念
  9. ICP经营许可证条件
  10. Qt 开源项目收集大全