意见箱
恒创运营部门将仔细参阅您的意见和建议,必要时将通过预留邮箱与您保持联络。感谢您的支持!
意见/建议
提交建议

【数据聚类】基于多元宇宙优化DBSCAN实现数据聚类分析附matlab代码

来源:恒创科技 编辑:恒创科技编辑部
2023-12-31 13:49:59


1 简介

针对DBSCAN聚类算法对参数敏感,参数选取依靠经验的问题,文章提出了一种基于多元宇宙优化的DBSCAN聚类(MVO-DBSCAN)算法.

2 部分代码

%_______________________________________________________________________________________%
% Multi-Verse Optimizer (MVO) source codes demo version 1.0 %
% %
% Developed in MATLAB R2011b(7.13) %
% %
% Author and programmer: Seyedali Mirjalili %
% %
% e-Mail: ali.mirjalili@gmail.com %
% seyedali.mirjalili@griffithuni.edu.au %
% %
% Homepage: http://www.alimirjalili.com %
% %
% Main paper: %
% %
% S. Mirjalili, S. M. Mirjalili, A. Hatamlou %
% Multi-Verse Optimizer: a nature-inspired algorithm for global optimization %
% Neural Computing and Applications, in press,2015, %
% DOI: http://dx.doi.org/10.1007/s00521-015-1870-7 %
% %
%_______________________________________________________________________________________%


【数据聚类】基于多元宇宙优化DBSCAN实现数据聚类分析附matlab代码

% You can simply define your cost in a seperate file and load its handle to fobj
% The initial parameters that you need are:
%__________________________________________
% fobj = @YourCostFunction
% dim = number of your variables
% Max_iteration = maximum number of generations
% SearchAgents_no = number of search agents
% lb=[lb1,lb2,...,lbn] where lbn is the lower bound of variable n
% ub=[ub1,ub2,...,ubn] where ubn is the upper bound of variable n
% If all the variables have equal lower bound you can just
% define lb and ub as two single number numbers

% To run MVO: [Best_score,Best_pos,cg_curve]=MVO(Universes_no,Max_iteration,lb,ub,dim,fobj)
%__________________________________________

function [Best_universe_Inflation_rate,Best_universe,Convergence_curve]=MVO(N,Max_time,lb,ub,dim,MinPts,train_X,train_labels)

%Two variables for saving the position and inflation rate (fitness) of the best universe
Best_universe=zeros(1,dim);
Best_universe_Inflation_rate=inf;

%Initialize the positions of universes
Universes=initialization(N,dim,ub,lb);

%Minimum and maximum of Wormhole Existence Probability (min and max in
% Eq.(3.3) in the paper
WEP_Max=1;
WEP_Min=0.2;

Convergence_curve=zeros(1,Max_time);

%Iteration(time) counter
Time=1;

%Main loop
while Time<Max_time+1

%Eq. (3.3) in the paper
WEP=WEP_Min+Time*((WEP_Max-WEP_Min)/Max_time);

%Travelling Distance Rate (Formula): Eq. (3.4) in the paper
TDR=1-((Time)^(1/6)/(Max_time)^(1/6));

%Inflation rates (I) (fitness values)
Inflation_rates=zeros(1,size(Universes,1));

for i=1:size(Universes,1)

%Boundary checking (to bring back the universes inside search
% space if they go beyoud the boundaries
Flag4ub=Universes(i,:)>ub;
Flag4lb=Universes(i,:)<lb;
Universes(i,:)=(Universes(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;

%Calculate the inflation rate (fitness) of universes
Inflation_rates(1,i)=fitness(Universes(i,1),MinPts,train_X,train_labels);

%Elitism
if Inflation_rates(1,i)<Best_universe_Inflation_rate
Best_universe_Inflation_rate=Inflation_rates(1,i);
Best_universe=Universes(i,:);
end

end

[sorted_Inflation_rates,sorted_indexes]=sort(Inflation_rates);

for newindex=1:N
Sorted_universes(newindex,:)=Universes(sorted_indexes(newindex),:); % 将Universes按照Inflation_rates的下标进行排序
end

%Normaized inflation rates (NI in Eq. (3.1) in the paper)
normalized_sorted_Inflation_rates=normr(sorted_Inflation_rates);

Universes(1,:)= Sorted_universes(1,:);

%Update the Position of universes
for i=2:size(Universes,1)%Starting from 2 since the firt one is the elite
Black_hole_index=i;
for j=1:size(Universes,2)
r1=rand();
if r1<normalized_sorted_Inflation_rates(i)
White_hole_index=RouletteWheelSelection(-sorted_Inflation_rates);% for maximization problem -sorted_Inflation_rates should be written as sorted_Inflation_rates
if White_hole_index==-1
White_hole_index=1;
end
%Eq. (3.1) in the paper
Universes(Black_hole_index,j)=Sorted_universes(White_hole_index,j);
end

if (size(lb,2)==1)
%Eq. (3.2) in the paper if the boundaries are all the same
r2=rand();
if r2<WEP
r3=rand();
if r3<0.5
Universes(i,j)=Best_universe(1,j)+TDR*((ub-lb)*rand+lb);
end
if r3>0.5
Universes(i,j)=Best_universe(1,j)-TDR*((ub-lb)*rand+lb);
end
end
end

if (size(lb,2)~=1)
%Eq. (3.2) in the paper if the upper and lower bounds are
%different for each variables
r2=rand();
if r2<WEP
r3=rand();
if r3<0.5
Universes(i,j)=Best_universe(1,j)+TDR*((ub(j)-lb(j))*rand+lb(j));
end
if r3>0.5
Universes(i,j)=Best_universe(1,j)-TDR*((ub(j)-lb(j))*rand+lb(j));
end
end
end

end
end

%Update the convergence curve
Convergence_curve(Time)=Best_universe_Inflation_rate;
Time=Time+1;
end

3 仿真结果

【数据聚类】基于多元宇宙优化DBSCAN实现数据聚类分析附matlab代码_聚类算法


【数据聚类】基于多元宇宙优化DBSCAN实现数据聚类分析附matlab代码_聚类算法_02

编辑

4 参考文献

[1]王李彧, 孙斌. 基于改进的DBSCAN聚类算法的云任务调度策略研究[C]// 2016年全国通信软件学术会议. 2016.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真。

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



上一篇: 【信号去噪】基于EEMD算法实现信号去噪附matlab代码 下一篇: 【雷达】基于粒子群算法优化综合线阵低副瓣方向图附matlab代码