700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 【预测模型-ELM分类】基于鲸鱼算法优化核极限学习机实现数据分类附matlab代码

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

时间:2022-01-03 19:00:41

相关推荐

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

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]. 智慧电力, , 50(2):7.

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

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

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。